From f979fa5f089a1294bb49b1250d41a20248dbd8b9 Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Fri, 15 Nov 2024 11:48:12 -0500 Subject: reliable multicast: receive() --- src/main/java/derms/net/rmulticast/Receive.java | 5 ++++- src/main/java/derms/net/rmulticast/ReliableMulticast.java | 7 ++++++- 2 files changed, 10 insertions(+), 2 deletions(-) (limited to 'src/main/java/derms/net') diff --git a/src/main/java/derms/net/rmulticast/Receive.java b/src/main/java/derms/net/rmulticast/Receive.java index c8467c2..c1965ed 100644 --- a/src/main/java/derms/net/rmulticast/Receive.java +++ b/src/main/java/derms/net/rmulticast/Receive.java @@ -18,14 +18,16 @@ class Receive implements Runnable { private final Set negativeAcks; private final ReceivedSet received; private final BlockingQueue> retransmissions; + private final BlockingQueue> delivered; private final Logger log; - Receive(ConcurrentMulticastSocket inSock, Set positiveAcks, Set negativeAcks, ReceivedSet received, BlockingQueue> retransmissions) { + Receive(ConcurrentMulticastSocket inSock, Set positiveAcks, Set negativeAcks, ReceivedSet received, BlockingQueue> retransmissions, BlockingQueue> delivered) { this.inSock = inSock; this.positiveAcks = positiveAcks; this.negativeAcks = negativeAcks; this.received = received; this.retransmissions = retransmissions; + this.delivered = delivered; this.log = Logger.getLogger(this.getClass().getName()); } @@ -47,6 +49,7 @@ class Receive implements Runnable { private void receive(Message msg) { positiveAcks.add(msg.id()); received.add(msg); + delivered.add(msg); negativeAcks.remove(msg.id()); retransmissions.remove(msg); diff --git a/src/main/java/derms/net/rmulticast/ReliableMulticast.java b/src/main/java/derms/net/rmulticast/ReliableMulticast.java index 44fc10c..600b536 100644 --- a/src/main/java/derms/net/rmulticast/ReliableMulticast.java +++ b/src/main/java/derms/net/rmulticast/ReliableMulticast.java @@ -48,7 +48,7 @@ public class ReliableMulticast { this.log = Logger.getLogger(this.getClass().getName()); - (new Thread(new Receive(inSock, positiveAcks, negativeAcks, received, retransmissions))).start(); + (new Thread(new Receive(inSock, positiveAcks, negativeAcks, received, retransmissions, delivered))).start(); (new Thread(new Retransmit(retransmissions, outSock, group))).start(); } @@ -64,4 +64,9 @@ public class ReliableMulticast { (new Thread(new Timeout(msg, positiveAcks, retransmissions))).start(); lastSend.set(Instant.now()); } + + public T receive() throws InterruptedException { + Message msg = delivered.take(); + return msg.payload; + } } -- cgit v1.2.3