diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2024-12-01 20:50:33 -0500 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2024-12-01 20:50:33 -0500 |
| commit | 4382f9dcbe097b86c957ba028e2bcab6ca384f58 (patch) | |
| tree | 618a7ec568bf406bc117a964f45f8e55cfb4795d | |
| parent | 90529cfd7ef1f38ddb25449ea85cceba036ecd57 (diff) | |
| download | soen423-4382f9dcbe097b86c957ba028e2bcab6ca384f58.zip | |
pass NetworkInterface to TotalOrderMulticastReceiver
| -rw-r--r-- | src/main/java/derms/ReplicaManager.java | 4 | ||||
| -rw-r--r-- | src/main/java/derms/net/tomulticast/Receive.java | 7 | ||||
| -rw-r--r-- | src/main/java/derms/net/tomulticast/TotalOrderMulticastReceiver.java | 18 |
3 files changed, 28 insertions, 1 deletions
diff --git a/src/main/java/derms/ReplicaManager.java b/src/main/java/derms/ReplicaManager.java index 81f8104..9e3a6cc 100644 --- a/src/main/java/derms/ReplicaManager.java +++ b/src/main/java/derms/ReplicaManager.java @@ -14,6 +14,7 @@ import derms.replica2.Replica2; import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; +import java.net.NetworkInterface; import java.net.Socket; import java.io.ObjectOutputStream; import java.io.ObjectInputStream; @@ -58,7 +59,8 @@ public class ReplicaManager { private void initMulticastReceiver() throws IOException { InetSocketAddress group = Config.group; InetAddress localAddress = InetAddress.getLocalHost(); // Your local address - multicastReceiver = new TotalOrderMulticastReceiver<Request>(group, localAddress); + NetworkInterface netInterface = NetworkInterface.getByInetAddress(localAddress); + multicastReceiver = new TotalOrderMulticastReceiver<Request>(group, localAddress, netInterface); new Thread(() -> { while (true) { diff --git a/src/main/java/derms/net/tomulticast/Receive.java b/src/main/java/derms/net/tomulticast/Receive.java index e89ae1b..6bc2df5 100644 --- a/src/main/java/derms/net/tomulticast/Receive.java +++ b/src/main/java/derms/net/tomulticast/Receive.java @@ -5,6 +5,7 @@ import derms.net.MessagePayload; import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; +import java.net.NetworkInterface; import java.util.concurrent.BlockingQueue; import java.util.concurrent.PriorityBlockingQueue; @@ -17,6 +18,12 @@ class Receive<T extends MessagePayload> extends TotalOrderMulticast<T> implement private final PriorityBlockingQueue<Message<T>> holdback; private final BlockingQueue<Message<T>> deliver; + Receive(InetSocketAddress group, InetAddress laddr, BlockingQueue<Message<T>> deliver, NetworkInterface ifs) throws IOException { + super(group, laddr, ifs); + this.holdback = new PriorityBlockingQueue<Message<T>>(); + this.deliver = deliver; + } + Receive(InetSocketAddress group, InetAddress laddr, BlockingQueue<Message<T>> deliver) throws IOException { super(group, laddr); this.holdback = new PriorityBlockingQueue<Message<T>>(); diff --git a/src/main/java/derms/net/tomulticast/TotalOrderMulticastReceiver.java b/src/main/java/derms/net/tomulticast/TotalOrderMulticastReceiver.java index 549af16..bb0f2d8 100644 --- a/src/main/java/derms/net/tomulticast/TotalOrderMulticastReceiver.java +++ b/src/main/java/derms/net/tomulticast/TotalOrderMulticastReceiver.java @@ -6,6 +6,7 @@ import derms.util.ThreadPool; import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; +import java.net.NetworkInterface; import java.time.Duration; import java.util.concurrent.*; import java.util.logging.Logger; @@ -24,6 +25,23 @@ public class TotalOrderMulticastReceiver<T extends MessagePayload> { * * @param group The IP address and port of the multicast group. * @param laddr The IP address of the local process. + * @param ifs The network interface to use. + */ + public TotalOrderMulticastReceiver(InetSocketAddress group, InetAddress laddr, NetworkInterface ifs) throws IOException { + this.deliver = new LinkedBlockingQueue<Message<T>>(); + this.log = Logger.getLogger(getClass().getName()); + + this.pool = Executors.newSingleThreadExecutor(); + this.receiver = new Receive<T>(group, laddr, deliver, ifs); + pool.execute(receiver); + } + + /** + * Join the specified totally-ordered multicast group as a receiver using the + * default network interface of the machine. + * + * @param group The IP address and port of the multicast group. + * @param laddr The IP address of the local process. */ public TotalOrderMulticastReceiver(InetSocketAddress group, InetAddress laddr) throws IOException { this.deliver = new LinkedBlockingQueue<Message<T>>(); |