diff --git a/client.py b/client.py index 0ffa0a5e0e33cbb71defaa7107d17f45bc72b04d..5421f9446f17da66a4c782f7749249a78be43663 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 f610113068de975a3b4ba9d3845d858826cde111..d288e3ab16526b07e8024caa2480f90f826d3c99 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()