def server_data_handler(response: bytes): unpacked_response = unpack_data(response) if unpacked_response: main_data: bytes = unpacked_response[2] str_main_data = str(main_data, "utf-8") # 1. if 'clients_lists' is received from server inside of main_data if str_main_data.__contains__("clients_lists"): # temp_clients_lists = str_main_data[str_main_data.index("{"):str_main_data.rindex("}") + 1] temp_clients_lists = str_main_data.replace("clients_lists", "") socket_clients_list: dict = None try: socket_clients_list = eval(temp_clients_lists) except NameError: print_exc(file=stdout) except SyntaxError: print_exc(file=stdout) except TypeError: print_exc(file=stdout) if not socket_clients_list: print("couldn't get socket_clients_list as VALUE of param 'response' is wrong.") return False return socket_clients_list else: print("Couldn't unpack the response in server_data_handler().") return False
def file_handler(response: bytes): unpacked_response = unpack_data(response) if unpacked_response: pass else: print("Couldn't unpack the response in file_handler().") return False
def signin_response(self): try: signin_response_received = self.socket_data_receive() if signin_response_received is None: # no data is received return False elif not signin_response_received: # Ending signin_response forcebly (Error ocurred from socket_data_receive()) return False unpacked_signin_response_received = unpack_data( signin_response_received) if unpacked_signin_response_received: msgbody: str = str(unpacked_signin_response_received[2], "utf-8") if msgbody.__contains__("signin_request"): fd_addr_email: dict = unpacked_signin_response_received[1] email: str = fd_addr_email["email"] fd_addr_email["fd"] = self.socket_client.fileno( ) # assigning fd of eachclient[serverside] self.socket_clients_dict[email] = fd_addr_email self.client_email = email else: return False return True except OSError as err: print("OSError in signin_response(): " + str(err.args)) print_exc(file=stdout) return False
def data_passing(self): """ taking data from one client and send it to another client :return: None """ print("\ndata_passing is started : ") while True: try: data_received = self.socket_data_receive() if data_received is None: # no data is received continue elif not data_received: # Ending data_serve forcebly (Error ocurred from socket_data_receive()) print( "error while fetching data in data_passing() from: " + str(self.client_address)) break unpacked_data_received = unpack_data(data_received) if unpacked_data_received: type_of_data: str = unpacked_data_received[0] main_data: bytes = unpacked_data_received[2] data_to_be_send = pack_data( type_of_data, { "fd": self.socket_client.fileno(), "addr": self.client_address, "email": self.client_email }, main_data ) # packed_data with sender's fd_address_email info recepient_fd: int = unpacked_data_received[1]["fd"] try: recepient_socket: socket = fromfd( recepient_fd, AF_INET, SOCK_STREAM) socket_data_send_to(recepient_socket, data_to_be_send) except OSError as err: print( "OSError for socket_data_send_to in data_passing(): " + str(err.args)) print( "recepient_fd does not exit as recepient_socket is closed" ) else: print( "Couldn't unpack the data_received in data_passing().") except ValueError as err: print("ValueError in data_passing(): " + str(err.args)) print_exc(file=stdout) print("\ndata_passing() is done for: " + str(self.client_address)) return except OSError as err: print("OSError in data_passing(): " + str(err.args)) print_exc(file=stdout) print("\ndata_passing() is done for: " + str(self.client_address)) return print("\ndata_passing() is done for: " + str(self.client_address))
def text_handler(response: bytes): unpacked_response = unpack_data(response) if unpacked_response: sender: str = str(unpacked_response[1]["email"]) message: str = str(unpacked_response[2], "utf-8") return sender, message else: print("Couldn't unpack the response in text_handler().") return False
def handle_responses_from_server(response: bytes): unpacked_response = unpack_data(response) if unpacked_response: type_of_response: str = unpacked_response[0] if type_of_response == "text": handled_value = text_handler(response) if handled_value: return "text", handled_value # handled_value is tuple contains sender, message else: return False elif type_of_response == "serv": handled_value = server_data_handler(response) if handled_value: return "serv", handled_value # handled_value is dict whose key are each clients email and values are dict contains fd and addr else: return False elif type_of_response == "file": file_handler(response) else: print("Couldn't unpack the response in handle_responses_from_server().") return False