diff --git a/chat_server.py b/chat_server.py index 762abccecd7ba07ef4fbf53df53d32c2edfb7250..c3b9e238dc37a4f9482b48ea9aa7a250a9624edc 100644 --- a/chat_server.py +++ b/chat_server.py @@ -24,6 +24,7 @@ if __name__ == '__main__': clients_cache = dict() BROADCAST_PORT = 49154 + #BROADCAST_PORT_LISTEN = 49154 print("I'm alive") MSG = bytes("HI MAIN SERVER", 'utf-8') @@ -31,15 +32,24 @@ if __name__ == '__main__': broadcast_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) broadcast_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) broadcast_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + + # Create a separate socket for receiving broadcast messages + # receive_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + # receive_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + # receive_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) + + if os == "macOS": broadcast_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) broadcast_socket.sendto(MSG, (broadcast_address, BROADCAST_PORT)) + + # receive_socket.bind((broadcast_address, BROADCAST_PORT_LISTEN)) else: broadcast_socket.sendto(MSG, (broadcast_address, BROADCAST_PORT)) print("Successfully sent message") message, server = broadcast_socket.recvfrom(1024) - print("after receive") + print("test") match = re.search(r'\b([A-Za-z])\b$', message.decode('utf-8')) server_id = match.group(1) diff --git a/server.py b/server.py index 2bb98f99a0f597f6d532f2efce6100705dbdb585..51042d98254e4d55871701ab8d2c3297e64dc739 100644 --- a/server.py +++ b/server.py @@ -142,9 +142,9 @@ class Server(multiprocessing.Process): def send_heartbeat(self): while True: time.sleep(10) - for server_id in self.local_servers_cache.items(): + for server_id, server_address in self.local_servers_cache.items(): if server_id != self.server_id: - acknowledgment_received = self.send_heartbeat_to_server(self.server_address, server_heartbeat_tcp_listener_port) + acknowledgment_received = self.send_heartbeat_to_server(server_address[0], server_heartbeat_tcp_listener_port) #acknowledgment_received = "YES" if acknowledgment_received: print(f"Heartbeat acknowledgment received from {server_id}") @@ -242,25 +242,41 @@ class Server(multiprocessing.Process): self.local_servers_cache[new_server_id] = addr print(self.server_id+": "+"Received server register broadcast message:", message) - self.register_server(addr, new_server_id) + #self.register_server(addr, new_server_id) + + register_server_thread = threading.Thread(target=self.register_server(addr, new_server_id)) + register_server_thread.start() update_cache_thread = threading.Thread(target=self.updateCacheList) if update_cache_thread.is_alive: update_cache_thread.run() else: update_cache_thread.start() + # def register_server(self, addr, server_id): + # BROADCAST_ADDRESS = self.get_broadcast_address() + # message = 'Hi ' + addr[0] + ' this is your chat-group ID: ' + str(server_id) + # server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + # if self.os == "macOS": + # server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) + # server_socket.connect((BROADCAST_ADDRESS, 49154)) + + # print(self.server_port) + # else: + # server_socket.connect(('<broadcast>', self.server_port)) + + # server_socket.sendto(str.encode(message), addr) + # server_socket.close() + def register_server(self, addr, server_id): - BROADCAST_ADDRESS = self.get_broadcast_address() message = 'Hi ' + addr[0] + ' this is your chat-group ID: ' + str(server_id) server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - if self.os == "macOS": - server_socket.connect((BROADCAST_ADDRESS, self.server_port)) - else: - server_socket.connect((BROADCAST_ADDRESS, self.server_port)) - + #server_socket.connect((self.server_address, self.server_port)) + server_socket.connect((addr[0], addr[1])) server_socket.sendto(str.encode(message), addr) + print(server_socket) server_socket.close() + def listen_for_clients(self): @@ -382,8 +398,8 @@ class Server(multiprocessing.Process): broadcast_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) if self.os == "macOS": - broadcast_socket.sendto(MSG, (BROADCAST_ADDRESS, PORT)) broadcast_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) + broadcast_socket.sendto(MSG, (BROADCAST_ADDRESS, PORT)) else: broadcast_socket.sendto(MSG, (BROADCAST_ADDRESS, PORT)) broadcast_socket.close() @@ -403,6 +419,7 @@ class Server(multiprocessing.Process): listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) if self.os == "macOS": + print("listening for cache updates") listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) listen_socket.bind((BROADCAST_ADDRESS, BROADCAST_PORT)) else: