From c380ec810fe8a23d7d10114f4aaf03ffe7679dbc Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Sat, 16 Nov 2024 12:35:48 -0500 Subject: reliable multicast: add nonblocking receive methods --- .../derms/net/rmulticast/ReliableMulticast.java | 23 ++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/main/java/derms/net/rmulticast/ReliableMulticast.java b/src/main/java/derms/net/rmulticast/ReliableMulticast.java index 72b3019..039e790 100644 --- a/src/main/java/derms/net/rmulticast/ReliableMulticast.java +++ b/src/main/java/derms/net/rmulticast/ReliableMulticast.java @@ -5,10 +5,12 @@ import derms.net.Packet; import java.io.IOException; import java.net.*; +import java.time.Duration; import java.util.Set; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.TimeUnit; import java.util.logging.Logger; /** @@ -86,4 +88,25 @@ public class ReliableMulticast { Message msg = delivered.take(); // Blocks until a message becomes available. return msg.payload; } + + /** Receive a message, or return null if none are available. */ + public T tryReceive() { + Message msg = delivered.poll(); + if (msg == null) + return null; + return msg.payload; + } + + /** + * Receive a message, waiting up to the specified wait time if necessary. + * + * @return A message received from the group, or null if the specified waiting + * time elapses before a message arrives. + */ + public T tryReceive(Duration waitTime) throws InterruptedException { + Message msg = delivered.poll(waitTime.toMillis(), TimeUnit.MILLISECONDS); + if (msg == null) + return null; + return msg.payload; + } } -- cgit v1.2.3