summaryrefslogtreecommitdiffstats
path: root/src/main/java/derms/replica/replica2/Announcer.java
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2024-11-28 10:42:31 -0500
committerSam Anthony <sam@samanthony.xyz>2024-11-28 10:42:31 -0500
commit6a710c3943f2350f4575f8cb1898129ef3c7dfdd (patch)
treedc20bc0480e77a74f2176e5f0fed02ad2251a2cd /src/main/java/derms/replica/replica2/Announcer.java
parent0cae203edc71b0285d2971f9124f24cb543b8e39 (diff)
downloadsoen423-6a710c3943f2350f4575f8cb1898129ef3c7dfdd.zip
rename assignment code replica package
Diffstat (limited to 'src/main/java/derms/replica/replica2/Announcer.java')
-rw-r--r--src/main/java/derms/replica/replica2/Announcer.java69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/main/java/derms/replica/replica2/Announcer.java b/src/main/java/derms/replica/replica2/Announcer.java
new file mode 100644
index 0000000..546e55b
--- /dev/null
+++ b/src/main/java/derms/replica/replica2/Announcer.java
@@ -0,0 +1,69 @@
+package derms.replica.replica2;
+
+import java.io.IOException;
+import java.net.*;
+import java.util.logging.Logger;
+
+public class Announcer implements Runnable {
+ public static final long intervalMillis = 3000;
+
+ private SocketAddress group;
+ private InetAddress localAddr;
+ private City city;
+ private Logger log;
+
+ public Announcer(SocketAddress group, InetAddress localAddr, City city) throws IOException {
+ this.group = group;
+ this.localAddr = localAddr;
+ this.city = city;
+ this.log = DermsLogger.getLogger(this.getClass());
+ }
+
+ @Override
+ public void run() {
+ NetworkInterface netInterface = null;
+ try {
+ netInterface = NetworkInterface.getByInetAddress(localAddr);
+ if (netInterface == null) {
+ throw new Exception("netInterface is null");
+ }
+ } catch (Exception e) {
+ log.severe("Failed to get network interface bound to "+localAddr.toString()+": "+e.getMessage());
+ return;
+ }
+
+ MulticastSocket sock = null;
+ try {
+ sock = new MulticastSocket();
+ sock.joinGroup(group, netInterface);
+ } catch (Exception e) {
+ log.severe("Failed to open multicast socket: "+e.getMessage());
+ return;
+ }
+
+ log.info("Announcing from "+localAddr.toString()+" ("+netInterface.getName()+") to "+group.toString());
+
+ DatagramPacket pkt = null;
+ try {
+ pkt = ObjectPacket.create(city, group);
+ } catch (IOException e) {
+ log.severe("Failed to create packet: "+e.getMessage());
+ sock.close();
+ return;
+ }
+
+ try {
+ for (;;) {
+ sock.send(pkt);
+ Thread.sleep(intervalMillis);
+ }
+ } catch (IOException e) {
+ log.severe("Failed to send to multicast socket "+group.toString()+": "+e.getMessage());
+ } catch (InterruptedException e) {
+ log.info("Interrupted.");
+ } finally {
+ log.info("Shutting down...");
+ sock.close();
+ }
+ }
+} \ No newline at end of file