From bd155005dde43feeac9d30681faca2f373adc692 Mon Sep 17 00:00:00 2001
From: Alexander Schulz <alexander.schulz@student.reutlingen-university.de>
Date: Sat, 20 Jan 2024 19:06:54 +0100
Subject: [PATCH] reassign clients when new leader

---
 client.py |  2 +-
 server.py | 24 +++++++++++++++++++-----
 2 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/client.py b/client.py
index 0ffa0a5..5421f94 100644
--- a/client.py
+++ b/client.py
@@ -101,4 +101,4 @@ class Client(multiprocessing.Process):
             connection, addr = client_receive_message_socket.accept()
             message = connection.recv(1024)
             print(f"New server: {message.decode('utf-8')}")
-            self.registered_server = message.decode('utf-8')
\ No newline at end of file
+            self.registered_server_address = message.decode('utf-8')
diff --git a/server.py b/server.py
index f610113..d288e3a 100644
--- a/server.py
+++ b/server.py
@@ -139,21 +139,27 @@ class Server(multiprocessing.Process):
             
             heartbeat_send_thread = threading.Thread(target=self.send_heartbeat)
             heartbeat_send_thread.start()
-
+        
         else:
             self.cache_update_listener_thread = threading.Thread(target=self.listen_for_cache_update)
-            self.client_message_listener_thread = threading.Thread(target=self.listen_for_client_messages)
             self.heartbeat_receive_thread = threading.Thread(target=self.listen_for_heartbeats)
             self.heartbeat_timeout_thread = threading.Thread(target=self.check_heartbeat_timeout)
             self.leader_election_thread = threading.Thread(target=self.leader_election)
 
             self.cache_update_listener_thread.start()
-            self.client_message_listener_thread.start()
             self.heartbeat_receive_thread.start()
             self.heartbeat_timeout_thread.start()
             self.leader_election_thread.start()
 
-            self.is_admin_of_groupchat = True
+            self.group_server_threads()
+    
+    def start_listen_client_message_thread(self):
+
+        self.client_message_listener_thread = threading.Thread(target=self.listen_for_client_messages)
+
+        self.client_message_listener_thread.start()
+
+        self.is_admin_of_groupchat = True
     
     def get_broadcast_address(self):
         IP = self.server_address
@@ -252,6 +258,10 @@ class Server(multiprocessing.Process):
         update_cache_thread2.start()
         update_group_server_of_client_thread.start()
 
+        # if server is not already a groupchat server start threads for groupchat tasks
+        if self.is_admin_of_groupchat == False:
+            self.start_listen_client_message_thread()
+
     # find out which clients need to be informed about their groupchat server change
     def update_group_server_of_client(self, reassigned_groups):
 
@@ -547,7 +557,7 @@ class Server(multiprocessing.Process):
         server_socket.bind((self.server_address, PORT))
         server_socket.listen()
 
-        print(self.server_id+": "+"Group-chat server is listening for client messages at port: ", self.server_port)
+        print(self.server_id+": "+"Group-chat server is listening for client messages at port: ", PORT)
 
         while True:
             connection, addr = server_socket.accept()
@@ -723,7 +733,11 @@ class Server(multiprocessing.Process):
     def handle_leader_tasks(self):
         # Perform leader-specific tasks here
         print(self.server_address, " is now the leader.")
+        old_server_id = self.server_id
         self.server_id = "MAIN"
+
+        # check if new MAIN server was leader of any groupchats and reassign these to serverID MAIN
+        self.reassign_chat_groups(old_server_id)
         self.stop_threads()
         self.run()
 
-- 
GitLab