package sample; import java.util.Collection; import java.util.EnumSet; import rescuecore2.worldmodel.ChangeSet; import rescuecore2.messages.Command; import rescuecore2.standard.entities.StandardEntityURN; import rescuecore2.standard.entities.Human; import rescuecore2.standard.entities.FireBrigade; import rescuecore2.standard.messages.AKSpeak; import rescuecore2.log.Logger; /** An agent for testing communication channels. */ public class ChannelTestAgent extends AbstractSampleAgent<Human> { private static final int CHANNEL = 4; private static final int N = 100; @Override public String toString() { return "Channel test agent"; } @Override protected void postConnect() { super.postConnect(); Logger.info("Channel test agent " + getID() + " connected"); } @Override protected void think(int time, ChangeSet changed, Collection<Command> heard) { if (time == config.getIntValue(kernel.KernelConstants.IGNORE_AGENT_COMMANDS_KEY)) { sendSubscribe(time, CHANNEL); } // Send N messages if (me() instanceof FireBrigade) { for (int i = 0; i < N; ++i) { say(i + 1, time); } } Logger.debug("Time " + time); Logger.debug("Heard " + heard.size() + " messages"); // Count failures and dropouts int failures = N; int dropout = 0; for (Command next : heard) { if (next instanceof AKSpeak) { AKSpeak speak = (AKSpeak)next; --failures; if (speak.getContent().length == 0) { ++dropout; } } } Logger.debug(failures + " failed messages"); Logger.debug(dropout + " dropout messages"); } @Override protected EnumSet<StandardEntityURN> getRequestedEntityURNsEnum() { return EnumSet.of(StandardEntityURN.FIRE_BRIGADE, StandardEntityURN.POLICE_FORCE, StandardEntityURN.AMBULANCE_TEAM); } private void say(int messageLength, int time) { sendSpeak(time, CHANNEL, new byte[messageLength]); } }