From d5a1ec8b54c1c3c516d07f1916276cd6e5a937e4 Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Sat, 23 Nov 2024 11:34:42 -0500 Subject: runicast: use DatagramChannel --- src/main/java/derms/net/runicast/Retransmit.java | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) (limited to 'src/main/java/derms/net/runicast/Retransmit.java') diff --git a/src/main/java/derms/net/runicast/Retransmit.java b/src/main/java/derms/net/runicast/Retransmit.java index affd00c..16f8859 100644 --- a/src/main/java/derms/net/runicast/Retransmit.java +++ b/src/main/java/derms/net/runicast/Retransmit.java @@ -1,12 +1,13 @@ package derms.net.runicast; -import derms.net.ConcurrentDatagramSocket; +import derms.io.Serial; import derms.net.MessagePayload; -import derms.net.Packet; import derms.util.Wait; import java.io.IOException; -import java.net.DatagramPacket; +import java.nio.ByteBuffer; +import java.nio.channels.ClosedChannelException; +import java.nio.channels.DatagramChannel; import java.time.Duration; import java.util.Queue; import java.util.concurrent.atomic.AtomicLong; @@ -18,10 +19,10 @@ class Retransmit implements Runnable { private final AtomicLong unacked; private final Queue> sent; - private final ConcurrentDatagramSocket sock; + private final DatagramChannel sock; private final Logger log; - Retransmit(AtomicLong unacked, Queue> sent, ConcurrentDatagramSocket sock) { + Retransmit(AtomicLong unacked, Queue> sent, DatagramChannel sock) { this.unacked = unacked; this.sent = sent; this.sock = sock; @@ -40,15 +41,15 @@ class Retransmit implements Runnable { } } } - } catch (InterruptedException e) { - log.info("Interrupted."); + } catch (InterruptedException | ClosedChannelException e) { + log.info("Shutting down."); } } - private void retransmit(Message msg) { + private void retransmit(Message msg) throws ClosedChannelException { try { - DatagramPacket pkt = Packet.encode(msg, sock.getRemoteSocketAddress()); - sock.send(pkt); + ByteBuffer buf = Serial.encode(msg); + sock.send(buf, sock.getRemoteAddress()); log.info("Retransmitted " + msg); } catch (IOException e) { log.warning("Failed to retransmit " + msg + ": " + e.getMessage()); -- cgit v1.2.3