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