예제 #1
0
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
예제 #2
0
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
예제 #3
0
    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
예제 #4
0
    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))
예제 #5
0
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
예제 #6
0
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