package lsr.paxos.network; import static lsr.common.ProcessDescriptor.processDescriptor; import java.util.BitSet; import lsr.paxos.messages.Message; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class GenericNetwork extends Network { private final UdpNetwork udpNetwork; private final TcpNetwork tcpNetwork; public GenericNetwork(TcpNetwork tcpNetwork, UdpNetwork udpNetwork) { this.tcpNetwork = tcpNetwork; this.udpNetwork = udpNetwork; } @Override public void start() { udpNetwork.start(); tcpNetwork.start(); } // we using internal methods in networks, so listeners has to be handled public void send(Message message, BitSet destinations) { // send message using UDP or TCP if (message.byteSize() < processDescriptor.maxUdpPacketSize) { // packet small enough to send using UDP udpNetwork.sendMessage(message, destinations); } else { // big packet so send using TCP tcpNetwork.sendMessage(message, destinations); } } @Override protected void send(Message message, int destination) { // send message using UDP or TCP if (message.byteSize() < processDescriptor.maxUdpPacketSize) { // packet small enough to send using UDP udpNetwork.send(message, destination); } else { // big packet so send using TCP tcpNetwork.send(message, destination); } } @SuppressWarnings("unused") private final static Logger logger = LoggerFactory.getLogger(GenericNetwork.class); }