diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2024-11-16 10:42:53 -0500 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2024-11-16 10:42:53 -0500 |
| commit | 8f78d0dfbd028e8db1a3ff9596f2521568f86b18 (patch) | |
| tree | 7ced5ed6fd18e7b4d3c5962dc418431419a03661 | |
| parent | e0196b370e8da38d366d327da57186dd3a44c2b2 (diff) | |
| download | soen423-8f78d0dfbd028e8db1a3ff9596f2521568f86b18.zip | |
reliable multicast: refactor Receive
| -rw-r--r-- | src/main/java/derms/net/rmulticast/Receive.java | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/main/java/derms/net/rmulticast/Receive.java b/src/main/java/derms/net/rmulticast/Receive.java index ea11c67..fee3c0a 100644 --- a/src/main/java/derms/net/rmulticast/Receive.java +++ b/src/main/java/derms/net/rmulticast/Receive.java @@ -50,13 +50,23 @@ class Receive<T extends MessagePayload> implements Runnable { private void receive(Message<?> msg) throws ClassCastException { groupMembers.add(msg.sender); + receiveAcks(msg); + receiveNacks(msg); + if (msg instanceof HeartbeatMessage) + return; // Only deliver in-band messages. + deliver((Message<T>) msg); + } + + private void receiveAcks(Message<?> msg) { for (MessageID mid : msg.acks) { acks.remove(mid); if (!received.contains(mid)) nacks.add(mid); } + } + private void receiveNacks(Message<?> msg) { for (MessageID mid : msg.nacks) { try { Message<T> rmsg = received.getByID(mid); @@ -65,10 +75,6 @@ class Receive<T extends MessagePayload> implements Runnable { nacks.add(mid); } } - - if (msg instanceof HeartbeatMessage) - return; // Only deliver in-band messages. - deliver((Message<T>) msg); } private void deliver(Message<T> msg) { |