From f02bf05c7b639f5edb86388c96dbb209a4622be9 Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Fri, 15 Nov 2024 13:23:06 -0500 Subject: reliable multicast: prune received list --- src/main/java/derms/net/rmulticast/ReliableMulticast.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'src/main/java/derms/net/rmulticast/ReliableMulticast.java') diff --git a/src/main/java/derms/net/rmulticast/ReliableMulticast.java b/src/main/java/derms/net/rmulticast/ReliableMulticast.java index de07f39..0798e68 100644 --- a/src/main/java/derms/net/rmulticast/ReliableMulticast.java +++ b/src/main/java/derms/net/rmulticast/ReliableMulticast.java @@ -20,10 +20,11 @@ public class ReliableMulticast { private final InetAddress laddr; // Local address. private final Set positiveAcks; // Positively acknowledged messages. private final Set negativeAcks; // Negatively acknowledged messages. + private final ReceivedSet received; private final BlockingQueue> retransmissions; // Messages pending retransmission. - private final AtomicReference lastSend; - private final ConcurrentMulticastSocket outSock; private final Set groupMembers; + private final ConcurrentMulticastSocket outSock; + private final AtomicReference lastSend; private final BlockingQueue> delivered; private final Logger log; @@ -33,23 +34,25 @@ public class ReliableMulticast { this.positiveAcks = new ConcurrentHashMap().keySet(); this.negativeAcks = new ConcurrentHashMap().keySet(); + this.received = new ReceivedSet(); this.retransmissions = new LinkedBlockingQueue>(); + this.groupMembers = new ConcurrentHashMap().keySet(); this.lastSend = new AtomicReference(Instant.now()); this.outSock = new ConcurrentMulticastSocket(group.getPort()); this.outSock.joinGroup(group.getAddress()); - this.groupMembers = new ConcurrentHashMap().keySet(); - this.delivered = new LinkedBlockingQueue>(); this.log = Logger.getLogger(this.getClass().getName()); ConcurrentMulticastSocket inSock = new ConcurrentMulticastSocket(); inSock.joinGroup(group.getAddress()); - (new Thread(new Receive(inSock, positiveAcks, negativeAcks, retransmissions, groupMembers, delivered))).start(); + (new Thread(new Receive(inSock, positiveAcks, negativeAcks, received, retransmissions, groupMembers, delivered))).start(); (new Thread(new Retransmit(retransmissions, outSock, group))).start(); + + (new Thread(new Prune(received, groupMembers))).start(); } public void send(T payload) throws IOException { -- cgit v1.2.3