package derms.net.rmulticast; import derms.net.Packet; import java.io.Serializable; import java.net.DatagramPacket; import java.net.MulticastSocket; import java.net.SocketAddress; import java.util.concurrent.BlockingQueue; import java.util.logging.Logger; /** Retransmit dropped messages. */ class Retransmit implements Runnable { private final BlockingQueue> retransmissions; private final MulticastSocket outSock; private final SocketAddress group; private final Logger log; Retransmit(BlockingQueue> retransmissions, MulticastSocket outSock, SocketAddress group) { this.retransmissions = retransmissions; this.outSock = outSock; this.group = group; this.log = Logger.getLogger(this.getClass().getName()); } @Override public void run() { try { for (; ; ) { Message msg = retransmissions.take(); try { DatagramPacket pkt = Packet.encode(msg, group); synchronized (outSock) { outSock.send(pkt); } } catch (Exception e) { log.warning(e.getMessage()); } } } catch (InterruptedException e) { log.info("Retransmit thread interrupted: " + e.getMessage()); } } }