package iamrescue.communication.scenario; import iamrescue.communication.ISimulationCommunicationConfiguration; import iamrescue.communication.messages.MessageChannel; import java.util.ArrayList; import java.util.Collection; import java.util.EnumSet; import java.util.HashSet; import java.util.Set; import org.apache.commons.lang.Validate; import rescuecore2.standard.entities.StandardEntity; import rescuecore2.standard.entities.StandardEntityURN; import rescuecore2.worldmodel.EntityID; public class ChannelAllocation implements IChannelAllocation { private Collection<StandardEntity> senders; private Collection<StandardEntity> receivers; private MessageChannel channel; private Set<EntityID> receiverIDs; private Set<EntityID> senderIDs; private StandardEntityURN receiverType; private EnumSet<StandardEntityURN> senderTypes; public ChannelAllocation(StandardEntityURN senderType, StandardEntityURN receiverType, ISimulationCommunicationConfiguration configuration, int radioChannelNumber) { this(EnumSet.of(senderType), receiverType, configuration, radioChannelNumber); } public ChannelAllocation(EnumSet<StandardEntityURN> senderTypes, StandardEntityURN receiverType, ISimulationCommunicationConfiguration configuration, int radioChannelNumber) { this.senderTypes = senderTypes; this.receiverType = receiverType; channel = configuration.getRadioChannel(radioChannelNumber); Validate.notNull(channel); Validate.notNull(channel.getBandwidth()); senders = new ArrayList<StandardEntity>(); for (StandardEntityURN senderType : senderTypes) { senders.addAll(configuration.getAgentsByType().get(senderType)); } receivers = configuration.getAgentsByType().get(receiverType); receiverIDs = new HashSet<EntityID>(); for (StandardEntity receiver : receivers) { receiverIDs.add(receiver.getID()); } senderIDs = new HashSet<EntityID>(); for (StandardEntity sender : senders) { senderIDs.add(sender.getID()); } } @Override public MessageChannel getChannel() { return channel; } @Override public boolean isReceiver(EntityID entityID) { return receiverIDs.contains(entityID); } @Override public boolean isSender(EntityID entityID) { return senderIDs.contains(entityID); } @Override public EnumSet<StandardEntityURN> getSenderTypes() { return senderTypes; } @Override public StandardEntityURN getReceiverType() { return receiverType; } @Override public int getAllocatedBandwidth(EntityID entityID) { if (isSender(entityID)) { return channel.getBandwidth() / senders.size(); } return 0; } }