From e3a297b9a1ab4a03516225f3b706a65e8da9cf5d Mon Sep 17 00:00:00 2001 From: Julian Zobel Date: Mon, 8 Jan 2018 13:42:13 +0100 Subject: [PATCH] Updates for multi resource setup --- .../resourcedistribution/ResourceModel.java | 2 +- .../factory/DummyResourceModelFactory.java | 13 ++++----- .../ResourceCollectionMovementMonitor.java | 27 +++++++++++-------- 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/de/tud/kom/p2psim/api/resourcedistribution/ResourceModel.java b/src/de/tud/kom/p2psim/api/resourcedistribution/ResourceModel.java index 9104e464..18e1ab49 100644 --- a/src/de/tud/kom/p2psim/api/resourcedistribution/ResourceModel.java +++ b/src/de/tud/kom/p2psim/api/resourcedistribution/ResourceModel.java @@ -32,7 +32,7 @@ public interface ResourceModel extends SimHostComponent { * whose vital * resources have been reduced to zero should be removed */ - public void registerResourceType(RESOURCE_TYPE resourceType, String name, int maxValue, int initialValue); + public void registerResourceType(RESOURCE_TYPE resourceType, String name, int maxValue, int initialValue, boolean vital); /** * Adds a new listener that gets notified about changes in the resource stock. diff --git a/src/de/tud/kom/p2psim/impl/resourcedistribution/factory/DummyResourceModelFactory.java b/src/de/tud/kom/p2psim/impl/resourcedistribution/factory/DummyResourceModelFactory.java index c8a1310a..0ef2e3d5 100644 --- a/src/de/tud/kom/p2psim/impl/resourcedistribution/factory/DummyResourceModelFactory.java +++ b/src/de/tud/kom/p2psim/impl/resourcedistribution/factory/DummyResourceModelFactory.java @@ -9,6 +9,7 @@ import de.tudarmstadt.maki.simonstrator.api.Time; import de.tudarmstadt.maki.simonstrator.api.component.ComponentNotAvailableException; import de.tudarmstadt.maki.simonstrator.api.component.HostComponent; import de.tudarmstadt.maki.simonstrator.api.component.HostComponentFactory; +import de.tudarmstadt.maki.simonstrator.api.component.resourcedistribution.DistributableResource.RESOURCE_TYPE; import de.tudarmstadt.maki.simonstrator.api.component.resourcedistribution.ResourceConsumer; /** @@ -19,8 +20,8 @@ import de.tudarmstadt.maki.simonstrator.api.component.resourcedistribution.Resou * @author Tim Feuerbach */ public class DummyResourceModelFactory implements HostComponentFactory { - private double startAmount = 1000; - private double maxAmount = 1000; + private int startAmount = 1000; + private int maxAmount = 1000; private double consumptionInRoaming = 1; private double consumptionInHeading = 3; private long consumptionInterval = Time.SECOND; @@ -38,8 +39,8 @@ public class DummyResourceModelFactory implements HostComponentFactory { StatefulResourceConsumption energyComponent = new StatefulResourceConsumption(consumer, consumptionInRoaming, consumptionInHeading, consumptionInterval); ResourceModel model = new DefaultResourceModel(simHost); - model.registerResourceType((short)0, "Energy", maxAmount, startAmount, true); - model.registerComponent(energyComponent, (short)0); + model.registerResourceType(RESOURCE_TYPE.ENERGY, "Energy", maxAmount, startAmount, true); + model.registerComponent(energyComponent, RESOURCE_TYPE.ENERGY); return model; } catch (ComponentNotAvailableException e) { @@ -48,11 +49,11 @@ public class DummyResourceModelFactory implements HostComponentFactory { } } - public void setStartAmount(double startAmount) { + public void setStartAmount(int startAmount) { this.startAmount = startAmount; } - public void setMaxAmount(double maxAmount) { + public void setMaxAmount(int maxAmount) { this.maxAmount = maxAmount; } diff --git a/src/de/tud/kom/p2psim/impl/topology/movement/resourceaware/ResourceCollectionMovementMonitor.java b/src/de/tud/kom/p2psim/impl/topology/movement/resourceaware/ResourceCollectionMovementMonitor.java index 07d472c8..571ab31b 100644 --- a/src/de/tud/kom/p2psim/impl/topology/movement/resourceaware/ResourceCollectionMovementMonitor.java +++ b/src/de/tud/kom/p2psim/impl/topology/movement/resourceaware/ResourceCollectionMovementMonitor.java @@ -13,6 +13,7 @@ import de.tudarmstadt.maki.simonstrator.api.common.UniqueID; import de.tudarmstadt.maki.simonstrator.api.component.ComponentNotAvailableException; import de.tudarmstadt.maki.simonstrator.api.component.core.MonitorComponent; import de.tudarmstadt.maki.simonstrator.api.component.resourcedistribution.*; +import de.tudarmstadt.maki.simonstrator.api.component.resourcedistribution.DistributableResource.RESOURCE_TYPE; import de.tudarmstadt.maki.simonstrator.api.component.resourcedistribution.analyzer.ResourceReceptionAnalyzer; import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.Location; import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.LocationListener; @@ -80,9 +81,9 @@ public class ResourceCollectionMovementMonitor implements SimHostComponent, Loca try { ResourceDistributor distributor = host.getComponent(ResourceDistributor.class); distributors.put(distributor.getBeaconID(), distributor); - distributor.registerListener(new ResourceDistributorListener() { - @Override - public void availableResourceAmountChanged(short resourceType, int oldValue, int newValue) { + distributor.registerListener(new ResourceDistributorListener() { + @Override + public void availableResourceAmountChanged(RESOURCE_TYPE resourceType, int oldValue, int newValue) { // pass } @@ -123,7 +124,12 @@ public class ResourceCollectionMovementMonitor implements SimHostComponent, Loca try { if (distributor.getHost().getComponent(SimLocationActuator.class).getRealPosition().distanceTo (location) <= distanceToCollect) { - transferResourcesFromDistributor(distributor); + + for(DistributableResource resource : distributor.getResources().getListOfResources()) + { + transferResourcesFromDistributor(distributor, resource.getResourceType()); + } + return; } } catch (ComponentNotAvailableException e) { @@ -139,14 +145,13 @@ public class ResourceCollectionMovementMonitor implements SimHostComponent, Loca } } - protected void transferResourcesFromDistributor(ResourceDistributor distributor) { - int resourcesGot = distributor.takeResources((int) consumer.getDemand()); - resourceModel.fillResourceUnits(distributor.getResourceType(), resourcesGot); + protected void transferResourcesFromDistributor(ResourceDistributor distributor, RESOURCE_TYPE resourceType) { + int resourcesGot = distributor.takeResources(resourceType, consumer.getDemand(resourceType)); + resourceModel.fillResourceUnits(resourceType, resourcesGot); if (analyzer != null) { - analyzer.visitedResourceDistributor(consumer.getHost().getId(), distributor.getBeaconID(), distributor - .getResourceType(), resourcesGot, Time.getCurrentTime()); + analyzer.visitedResourceDistributor(consumer.getHost().getId(), distributor.getBeaconID(), resourceType, resourcesGot, Time.getCurrentTime()); } - notifyListener(distributor.getBeaconID(), distributor.getBeaconSequenceID(), resourcesGot, distributor.getResourceUnits()); + notifyListener(distributor.getBeaconID(), distributor.getBeaconSequenceID(), resourcesGot, distributor.getResourceUnits(resourceType)); } protected void beaconNotAvailable(UniqueID beaconId) { @@ -157,7 +162,7 @@ public class ResourceCollectionMovementMonitor implements SimHostComponent, Loca * Notifies the host's resource collection listener (if existing). Method can be overridden to conceal the actual * amount of resources available at the distributor (so the node has to wait for a new announcement). */ - protected void notifyListener(UniqueID beaconID, int beaconSequenceId, int resourcesGot, double resourcesRemaining) { + protected void notifyListener(UniqueID beaconID, int beaconSequenceId, int resourcesGot, int resourcesRemaining) { if (listeners != null) { for (ResourceCollectionListener listener : listeners) { listener.resourcesCollected(beaconID, beaconSequenceId, resourcesGot, resourcesRemaining); -- GitLab