summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2024-12-01 20:50:33 -0500
committerSam Anthony <sam@samanthony.xyz>2024-12-01 20:50:33 -0500
commit4382f9dcbe097b86c957ba028e2bcab6ca384f58 (patch)
tree618a7ec568bf406bc117a964f45f8e55cfb4795d
parent90529cfd7ef1f38ddb25449ea85cceba036ecd57 (diff)
downloadsoen423-4382f9dcbe097b86c957ba028e2bcab6ca384f58.zip
pass NetworkInterface to TotalOrderMulticastReceiver
-rw-r--r--src/main/java/derms/ReplicaManager.java4
-rw-r--r--src/main/java/derms/net/tomulticast/Receive.java7
-rw-r--r--src/main/java/derms/net/tomulticast/TotalOrderMulticastReceiver.java18
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>>();