package iamrescue.communication.messages; import java.util.HashMap; import java.util.Map; import org.apache.commons.lang.builder.ReflectionToStringBuilder; public class MessageChannel { //private static Map<Integer, MessageChannel> channels = new HashMap<Integer, MessageChannel>(); private MessageChannelType type; private Integer range; private Integer maxMessageSize; private Integer maxMessageCount; private Integer bandwidth; private int channelNumber; private double outputFailureProbability = 0; private double inputDropoutProbability = 0; private double inputFailureProbability = 0; private double outputDropoutProbability = 0; public MessageChannel(int channelNumber) { this.channelNumber = channelNumber; } public MessageChannel(int i, MessageChannelType type) { this(i); setType(type); } public int getEffectiveBandwidth() { double failureProbability = getOverallFailureProbability(); return (int) (bandwidth * (1 - failureProbability)); } public double getOverallFailureProbability() { return 1 - (1 - outputFailureProbability) * (1 - outputDropoutProbability) * (1 - inputFailureProbability) * (1 - inputDropoutProbability); } public double getOutputFailureProbability() { return outputFailureProbability; } public void setOutputFailureProbability(double outputFailureProbability) { this.outputFailureProbability = outputFailureProbability; } public double getInputDropoutProbability() { return inputDropoutProbability; } public void setInputDropoutProbability(double inputDropoutProbability) { this.inputDropoutProbability = inputDropoutProbability; } public double getInputFailureProbability() { return inputFailureProbability; } public void setInputFailureProbability(double inputFailureProbability) { this.inputFailureProbability = inputFailureProbability; } public double getOutputDropoutProbability() { return outputDropoutProbability; } public void setOutputDropoutProbability(double outputDropoutProbability) { this.outputDropoutProbability = outputDropoutProbability; } public MessageChannelType getType() { return type; } public Integer getRange() { return range; } public void setType(MessageChannelType type) { this.type = type; } public void setRange(Integer range) { this.range = range; } public void setMessageMaxSize(Integer maxMessageSize) { this.maxMessageSize = maxMessageSize; } public void setMessageMaxCount(Integer maxMessageCount) { this.maxMessageCount = maxMessageCount; } public Integer getMaxMessageCount() { return maxMessageCount; } public Integer getMaxMessageSize() { return maxMessageSize; } public void setBandwidth(Integer bandwidth) { this.bandwidth = bandwidth; } public Integer getBandwidth() { return bandwidth; } public int getChannelNumber() { return channelNumber; } @Override public String toString() { return ReflectionToStringBuilder.reflectionToString(this); } @Override public boolean equals(Object obj) { if (obj instanceof MessageChannel) { MessageChannel channel = (MessageChannel) obj; return channel.getChannelNumber() == getChannelNumber(); } return false; } @Override public int hashCode() { return getChannelNumber() * 31; } /* public static MessageChannel get(int channel, MessageChannelType type) { if (!channels.containsKey(channel)) { channels.put(channel, new MessageChannel(channel, type)); } return channels.get(channel); }*/ }