package iamrescue.communication;
import iamrescue.agent.ISimulationTimer;
import iamrescue.communication.failuredetection.SentMessageMemory;
import iamrescue.communication.messages.Message;
import iamrescue.communication.messages.MessageChannel;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.log4j.Logger;
public class ScheduledOutgoingMessageService extends AOutgoingMessageSelector {
private IMessagingSchedule scheduler;
private ISimulationTimer timer;
private static final Logger LOGGER = Logger
.getLogger(ScheduledOutgoingMessageService.class);
public ScheduledOutgoingMessageService(ISimulationTimer timer,
IOutgoingMessageService outgoingMessageService, IEncoder encoder,
IMessagingSchedule scheduler, SentMessageMemory memory) {
super(outgoingMessageService, encoder, memory);
this.timer = timer;
this.scheduler = scheduler;
}
@Override
public void sendMessages(Map<MessageChannel, List<Message>> radioMessageQs) {
for (Entry<MessageChannel, List<Message>> entry : radioMessageQs
.entrySet()) {
int allocatedMessageCount = scheduler.getAllocatedMessagesCount(
entry.getKey(), timer.getTime());
int allocatedMessageSize = scheduler.getAllocatedMessagesSize(entry
.getKey(), timer.getTime());
int allocatedTotalBandwidth = scheduler.getAllocatedTotalBandwidth(
entry.getKey(), timer.getTime());
int allocatedMaximumRepetitions = scheduler.getMaximumRepetitions(
entry.getKey(), timer.getTime());
if (LOGGER.isTraceEnabled()) {
LOGGER.trace("Allocated message count:" + allocatedMessageCount
+ ", message size: " + allocatedMessageSize
+ ", bandwidth: " + allocatedTotalBandwidth
+ ", on channel: " + entry.getKey() + ". Messages: "
+ entry.getValue());
}
super.sendMessages(entry.getValue(), entry.getKey(),
allocatedMessageCount, allocatedMessageSize,
allocatedTotalBandwidth, allocatedMaximumRepetitions, timer
.getTime());
}
}
}