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/Message.java | |
| parent | e62c171662c1fd14bf1aa0887ccb73e219f8f189 (diff) | |
| download | soen423-6bd335c7382c0da8486e94d253dffa28525ceec7.zip | |
reliable multicast: avoid receiving duplicate messages
Diffstat (limited to 'src/main/java/derms/net/rmulticast/Message.java')
| -rw-r--r-- | src/main/java/derms/net/rmulticast/Message.java | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/main/java/derms/net/rmulticast/Message.java b/src/main/java/derms/net/rmulticast/Message.java index 329b62c..b4749a3 100644 --- a/src/main/java/derms/net/rmulticast/Message.java +++ b/src/main/java/derms/net/rmulticast/Message.java @@ -4,7 +4,12 @@ import java.io.Serializable; import java.net.InetAddress; class Message<T extends MessagePayload> implements Serializable { + /* Used as a salt in the hash function. Allows different messages to have + * different IDs, even if they have the same payload. */ + private static int seq = 1; + T payload; + int salt; // Used in hash function. Allows messages to have unique IDs, even if they have the same payload. InetAddress sender; MessageID[] acks; // IDs of messages that this message positively acknowledges. MessageID[] nacks; // IDs of messages that this message negatively acknowledges. @@ -15,6 +20,7 @@ class Message<T extends MessagePayload> implements Serializable { */ Message(T payload, InetAddress sender, MessageID[] acks, MessageID[] nacks) { this.payload = payload; + this.salt = seq++; this.sender = sender; this.acks = acks; this.nacks = nacks; @@ -26,7 +32,7 @@ class Message<T extends MessagePayload> implements Serializable { @Override public int hashCode() { - return payload.hash(); + return payload.hash() * salt; } @Override |