summaryrefslogtreecommitdiffstats
path: root/src/main
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2024-11-16 10:42:53 -0500
committerSam Anthony <sam@samanthony.xyz>2024-11-16 10:42:53 -0500
commit8f78d0dfbd028e8db1a3ff9596f2521568f86b18 (patch)
tree7ced5ed6fd18e7b4d3c5962dc418431419a03661 /src/main
parente0196b370e8da38d366d327da57186dd3a44c2b2 (diff)
downloadsoen423-8f78d0dfbd028e8db1a3ff9596f2521568f86b18.zip
reliable multicast: refactor Receive
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/derms/net/rmulticast/Receive.java14
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) {