package iamrescue.communication.failuredetection; import iamrescue.communication.messages.Message; import iamrescue.communication.messages.MessageChannel; import iamrescue.communication.util.ByteArray; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; import javolution.util.FastMap; import javolution.util.FastSet; import org.apache.log4j.Logger; public class SentMessageMemory { // private static final List<Message> EMPTY_LIST = new FastList<Message>(); private Map<Integer, SentMessages> sentMessages = new FastMap<Integer, SentMessages>(); // private Map<Integer, Integer> timeStepSent = new FastMap<Integer, // Integer>(); private static final Logger LOGGER = Logger .getLogger(SentMessageMemory.class); public void setSentMessages(MessageChannel channel, int timeStep, Map<ByteArray, List<Message>> messages) { sentMessages.put(channel.getChannelNumber(), new SentMessages(channel, timeStep, messages)); } public SentMessages getSentMessages(MessageChannel channel) { return sentMessages.get(channel.getChannelNumber()); } public SentMessages getSentMessages(int channelID) { return sentMessages.get(channelID); } public static class SentMessages { private MessageChannel channel; private int timeStep; private Map<ByteArray, List<Message>> messages; public SentMessages(MessageChannel channel, int timeStep, Map<ByteArray, List<Message>> messages) { super(); this.channel = channel; this.timeStep = timeStep; this.messages = messages; } public MessageChannel getChannel() { return channel; } public int getTimeStep() { return timeStep; } public Collection<Message> getMessages() { Set<Message> messageSet = new FastSet<Message>(); for (List<Message> messageList : messages.values()) { for (Message message : messageList) { messageSet.add(message); } } return messageSet; } public void received(ByteArray byteArray) { messages.remove(byteArray); } } public void clear(int channelNumber) { sentMessages.remove(channelNumber); } public Set<Integer> getSentChannels() { return sentMessages.keySet(); } public void clearAll() { sentMessages.clear(); } }