From a7d8f587b3bac68f2ca1834107a382bbaf92e732 Mon Sep 17 00:00:00 2001
From: Quoc Dao <quoc.dao@student.reutlingen-university.de>
Date: Sat, 3 Feb 2024 23:49:04 +0100
Subject: [PATCH] test

---
 server.py | 47 ++++++++++++++++++++++++-----------------------
 1 file changed, 24 insertions(+), 23 deletions(-)

diff --git a/server.py b/server.py
index 9bf3002..4b1fa84 100644
--- a/server.py
+++ b/server.py
@@ -284,39 +284,40 @@ class Server():
         self.missed_heartbeats_limit = 5
         self.missed_heartbeats = 0
 
-        # multicast_group = (MULTICAST_GROUP_IP, HEARTBEAT_PORT)
-        heartbeat_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
-
-         # Set the time-to-live for messages to 1 so they do not go past the local network segment.
-        # heartbeat_socket.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 1)
-        heartbeat_socket.bind(('', HEARTBEAT_PORT))
-
+      
+         # Erstelle und binde den Multicast-Socket für Heartbeats
+        multicast_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+        multicast_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+        multicast_socket.bind((MY_IP, HEARTBEAT_PORT))
         multicast_group = socket.inet_aton(MULTICAST_GROUP_IP)
-        mreg = struct.pack('4sL', multicast_group, socket.INADDR_ANY)
-        heartbeat_socket.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreg)
+        mreq = struct.pack('4sL', multicast_group, socket.INADDR_ANY)
+        multicast_socket.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
 
-        threading.Thread(target=self.heartbeat_subscriber, args=(heartbeat_socket, multicast_group)).start()
-        threading.Thread(target=self.heartbeat_publisher, args=(heartbeat_socket, multicast_group)).start()
+        # Starte Heartbeat-Sender- und Empfänger-Threads
+        threading.Thread(target=self.heartbeat_publisher, args=(multicast_socket,)).start()
+        threading.Thread(target=self.heartbeat_subscriber, args=(multicast_socket,)).start()
+        
 
-    def heartbeat_publisher(self, heartbeat_socket, multicast_group):
+    def heartbeat_publisher(self, multicast_socket):
         while True:
             if self.is_leader:
                 print('\n I am Leader, sending heartbeat\n')
-                # Code to sends a heartbeat message
-                msg = '#'
-                heartbeat_socket.sendto(msg.encode(), (MULTICAST_GROUP_IP, HEARTBEAT_PORT))
-                time.sleep(self.heartbeat_interval)
+                heartbeat_message = "#"
+                multicast_socket.sendto(heartbeat_message.encode(), (MULTICAST_GROUP_IP, HEARTBEAT_PORT))
+            time.sleep(self.heartbeat_interval)
 
-    def heartbeat_subscriber(self, heartbeat_socket, multicast_group):
+    def heartbeat_subscriber(self, multicast_socket):
         while True:
-            if not self.is_leader:
-                print('\nWaiting to receive heartbeat...\n')
-                data, address = heartbeat_socket.recvfrom(1024)
-                if data:
-                    print(data.decode())
-                    heartbeat_socket.sendto('#'.encode(), address)
+            data, address = multicast_socket.recvfrom(1024)
+            if data:
+                sender_ip = address[0]
+                if sender_ip != MY_IP:
+                    print(f"Received heartbeat from {address}: {data.decode()}")
+                    # Hier kannst du die Logik hinzufügen, um den Status des Heartbeats zu verarbeiten
+            time.sleep(1)
 
 
+    
 
 
                     # time_since_last_heartbeat = time.time() - self.leader_heartbeat_last_received
-- 
GitLab