diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2024-11-18 10:35:22 -0500 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2024-11-18 10:35:22 -0500 |
| commit | 6bd335c7382c0da8486e94d253dffa28525ceec7 (patch) | |
| tree | 0324179a04d97664bd7f10faf8850d10d3b0555f /src/main/java/derms/net/rmulticast/ReceivedSet.java | |
| parent | e62c171662c1fd14bf1aa0887ccb73e219f8f189 (diff) | |
| download | soen423-6bd335c7382c0da8486e94d253dffa28525ceec7.zip | |
reliable multicast: avoid receiving duplicate messages
Diffstat (limited to 'src/main/java/derms/net/rmulticast/ReceivedSet.java')
| -rw-r--r-- | src/main/java/derms/net/rmulticast/ReceivedSet.java | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/main/java/derms/net/rmulticast/ReceivedSet.java b/src/main/java/derms/net/rmulticast/ReceivedSet.java index 831ecbe..5fd8ce5 100644 --- a/src/main/java/derms/net/rmulticast/ReceivedSet.java +++ b/src/main/java/derms/net/rmulticast/ReceivedSet.java @@ -14,8 +14,18 @@ class ReceivedSet<T extends MessagePayload> { this.received = new ConcurrentLinkedQueue<Message<T>>(); } - void add(Message<T> e) { - received.add(e); + /** + * Add a message to the set if it is not already present. + * + * @param msg The message to add to the set. + * @return True if the set did not already contain the specified message. + */ + // TODO: faster insertion. + boolean add(Message<T> msg) { + if (contains(msg)) + return false; + received.add(msg); + return true; } // TODO: faster search. @@ -35,6 +45,10 @@ class ReceivedSet<T extends MessagePayload> { } } + boolean contains(Message<T> msg) { + return contains(msg.id()); + } + /** Remove the specified message from the set, if it is present. */ void remove(Message<T> msg) { received.remove(msg); |