diff --git a/client.py b/client.py index 3f0a51e3c26a9b62eba44eeb1f055406239c86f7..865ef23dfeeab068ff6b275ef6c6faf1c90a9b1d 100644 --- a/client.py +++ b/client.py @@ -14,26 +14,28 @@ class Client(multiprocessing.Process): def run(self): print("Client: Up and running") - action = input("Client: Enter type of action ('r' to register): ") - if (action == "r"): - group = input("Client: Which group dou you want to join? ") - self.register("register", group) + + while True: + action = input("Client: Enter type of action ('r' to register): ") + if (action == "r"): + group = input("Client: Which group dou you want to join? ") + success = self.register("register", group) - send_thread = threading.Thread(target=self.send_message) - receive_thread = threading.Thread(target=self.receive_messages) - receive_new_server_thread = threading.Thread(target=self.receive_new_server) + if success == 0: + continue - send_thread.start() - receive_thread.start() - receive_new_server_thread.start() + send_thread = threading.Thread(target=self.send_message) + receive_thread = threading.Thread(target=self.receive_messages) + receive_new_server_thread = threading.Thread(target=self.receive_new_server) - # waiting for thread to stop = prevent the programm from shutdown before thread is stopped - send_thread.join() - receive_thread.join() + send_thread.start() + receive_thread.start() + receive_new_server_thread.start() - else: - message = input("Client: Enter message:") - print(message) + # waiting for thread to stop = prevent the programm from shutdown before thread is stopped + send_thread.join() + receive_thread.join() + def register(self, message_type, message_group): PORT = 49153 @@ -49,18 +51,25 @@ class Client(multiprocessing.Process): print('Client: Received message from server: ', data.decode('utf-8')) - # search for server ip_address in message from server - ip_pattern = r'\b(?:\d{1,3}\.){3}\d{1,3}\b' - matches = re.findall(ip_pattern, data.decode('utf-8')) + if data.decode('utf-8') == "Group does not exist": + success = 0 + else: + # search for server ip_address in message from server + ip_pattern = r'\b(?:\d{1,3}\.){3}\d{1,3}\b' + matches = re.findall(ip_pattern, data.decode('utf-8')) + + # 2nd ip address in message from server is server address + self.registered_server_address = matches[1] + + #self.registered_server = server + print("Client: My server: ", self.registered_server_address) - # 2nd ip address in message from server is server address - self.registered_server_address = matches[1] - - #self.registered_server = server - print("Client: My server: ", self.registered_server_address) + success = 1 broadcast_socket.close() + return success + def send_message(self): PORT = 50001 diff --git a/server.py b/server.py index f454c592da5eefbe7c11b79c91b465e0e384e222..b797fe19643a6ab4849f10ce4f7ee26d03976f0d 100644 --- a/server.py +++ b/server.py @@ -456,6 +456,7 @@ class Server(multiprocessing.Process): if group not in self.local_group_cache: print(self.server_id+": "+"Group "+group+" doesn't exist.") + self.send_negative_reply_to_client(client_addr) else: print(self.server_id+": "+"Group "+group+" exists") @@ -482,6 +483,14 @@ class Server(multiprocessing.Process): return addr + def send_negative_reply_to_client(self, client_addr): + PORT = 1001 + message = "Group does not exist" + server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + server_socket.connect((self.server_address, PORT)) + server_socket.sendto(str.encode(message), client_addr) + server_socket.close() + def send_reply_to_client(self, server_addr, client_addr): PORT = 1000 message = 'Hi ' + client_addr[0] + ' this is your groupchat server: ' + server_addr