/** * */ package iamrescue.communication.scenario.scenarios; import iamrescue.agent.ISimulationTimer; import iamrescue.communication.IMessagingSchedule; import iamrescue.communication.messages.Message; import iamrescue.communication.messages.MessageChannel; import iamrescue.communication.scenario.ICommunicationScenario; import iamrescue.communication.scenario.scenarios.DefaultIAMCommunicationsScenario.MultiChannelScheduler; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; import javolution.util.FastList; import javolution.util.FastMap; import rescuecore2.standard.entities.StandardEntityURN; import rescuecore2.worldmodel.EntityID; /** * @author Sebastian * */ public class SingleChannelScenario implements ICommunicationScenario { private MessageChannel channel; private int agents; private StandardEntityURN myType; private Map<MessageChannel, List<Message>> map = new FastMap<MessageChannel, List<Message>>(); private final List<MessageChannel> voiceChannels; private MultiChannelScheduler schedule; public SingleChannelScenario(MessageChannel channel, int agents, StandardEntityURN myType, List<MessageChannel> voiceChannels) { this.channel = channel; this.agents = agents; this.myType = myType; this.voiceChannels = voiceChannels; } /* * (non-Javadoc) * * @see * iamrescue.communication.scenario.ICommunicationScenario#getChannelsToCenters * () */ @Override public List<MessageChannel> getChannelsToOtherTeams() { return Collections.singletonList(channel); } /* * (non-Javadoc) * * @see * iamrescue.communication.scenario.ICommunicationScenario#getChannelsToPlatoons * () */ @Override public List<MessageChannel> getChannelsToOwnTeam() { return Collections.singletonList(channel); } /* * (non-Javadoc) * * @seeiamrescue.communication.scenario.ICommunicationScenario# * getChannelsToSubscribeTo() */ @Override public List<MessageChannel> getChannelsToSubscribeTo() { return Collections.singletonList(channel); } /* * (non-Javadoc) * * @see iamrescue.communication.scenario.ICommunicationScenario#getMyRole() */ @Override public StandardEntityURN getMyRole() { return myType; } /* * (non-Javadoc) * * @see * iamrescue.communication.scenario.ICommunicationScenario#getScheduler() */ @Override public IMessagingSchedule getScheduler() { if (schedule == null) { schedule = new MultiChannelScheduler(voiceChannels); schedule.addSchedule(channel, new SharedBandwidthSchedule(channel, agents)); } return schedule; } /* * (non-Javadoc) * * @see * iamrescue.communication.scenario.ICommunicationScenario#distributeMessages * (java.util.List, java.util.List, iamrescue.agent.ISimulationTimer) */ @Override public Map<MessageChannel, List<Message>> distributeMessages( List<Message> messagesToOwnTeam, List<Message> messagesToOtherTeams, ISimulationTimer timer) { map.clear(); List<Message> list = new FastList<Message>(); list.addAll(messagesToOtherTeams); list.addAll(messagesToOwnTeam); map.put(channel, list); return map; } @Override public void reinitialiseTeam(Collection<EntityID> toIgnore) { // TODO Auto-generated method stub } @Override public boolean amICentre() { return false; } @Override public List<EntityID> getMyCentres() { return new ArrayList<EntityID>(); } }