summaryrefslogtreecommitdiffstats
path: root/src/main/java/derms/net/runicast/Retransmit.java
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2024-11-23 11:34:42 -0500
committerSam Anthony <sam@samanthony.xyz>2024-11-23 11:34:42 -0500
commitd5a1ec8b54c1c3c516d07f1916276cd6e5a937e4 (patch)
tree34f4ed7975803f573d16a7215ae39a9b2791a9b9 /src/main/java/derms/net/runicast/Retransmit.java
parente3df4a078afd37314d330daa2de0883f8dd1811b (diff)
downloadsoen423-d5a1ec8b54c1c3c516d07f1916276cd6e5a937e4.zip
runicast: use DatagramChannel
Diffstat (limited to 'src/main/java/derms/net/runicast/Retransmit.java')
-rw-r--r--src/main/java/derms/net/runicast/Retransmit.java21
1 files changed, 11 insertions, 10 deletions
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<T extends MessagePayload> implements Runnable {
private final AtomicLong unacked;
private final Queue<Message<T>> sent;
- private final ConcurrentDatagramSocket sock;
+ private final DatagramChannel sock;
private final Logger log;
- Retransmit(AtomicLong unacked, Queue<Message<T>> sent, ConcurrentDatagramSocket sock) {
+ Retransmit(AtomicLong unacked, Queue<Message<T>> sent, DatagramChannel sock) {
this.unacked = unacked;
this.sent = sent;
this.sock = sock;
@@ -40,15 +41,15 @@ class Retransmit<T extends MessagePayload> implements Runnable {
}
}
}
- } catch (InterruptedException e) {
- log.info("Interrupted.");
+ } catch (InterruptedException | ClosedChannelException e) {
+ log.info("Shutting down.");
}
}
- private void retransmit(Message<T> msg) {
+ private void retransmit(Message<T> 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());