diff options
Diffstat (limited to 'src/main')
| -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) { |