示例#1
0
    def authentication_and_create_handler(self, conn, next_id=None):
        # принимает один байт для подтверждения
        # отправляет следующий номер либо из генератора id_clients, либо из id_PP
        bytes_message = conn.recv(cnf.SIZE_HEADER)
        if not bytes_message:
            print("disconnect")
            return False
        try:
            message = cnf.to_data_message_from_bytes_2(bytes_message)
        except:
            return False

        if message.cmd:
            print("пришло что-то странное.... ")
            print(message)
            return False

        elif message.cmd == CMD.NEW_CLIENT:  # заглушка, замена аутотификации на сервере. Не забыть изменить!!!
            print("Client!")
            next_id = self.id_clients.next()
            self.create_client_handler(conn, next_id)

        elif message.cmd == CMD.NEW_PP:
            print('PP')
            next_id = self.id_PP.next()
            self.create_PP_handler(conn, next_id)

        answer = cnf.ntuple_data_message(0, CMD.GET_SELF_ID, self.self_ID,
                                         message.sender, 0, next_id)
        bytes_answer = cnf.to_bytes_from_data_message_2(answer)
        conn.send(bytes_answer)  # TODO !!! ВНИМАНИЕ!!!
        return True
示例#2
0
def main():
    TCP_IP = cnf.server_address
    TCP_PORT = cnf.PORT
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((TCP_IP, TCP_PORT))
    cmd = CMD.NEW_PP
    sender = 0
    receiver = 100  # id сервера
    data = 0
    size_next = 0

    msg = cnf.ntuple_data_message(0, cmd, sender, receiver, size_next, data)
    mess = cnf.to_bytes_from_data_message(msg)

    if not sock.send(mess):
        return
    answer = sock.recv(cnf.SIZE_HEADER)

    if not answer:
        print("нет ответа")
        return
    message = cnf.to_data_message_from_bytes_(answer)
    self_id = message.data

    while 1:
        receiver = input("Продолжить, получатель?\n")
        id_ = msg.id + 1
        msg = cnf.ntuple_data_message(id_, CMD.ON_LIGHT, self_id, receiver,
                                      msg.size_next, msg.data)
        mess = cnf.to_bytes_from_data_message(msg)

        sock.send(mess)
        tmp = sock.recv(cnf.SIZE_HEADER) or None
        if not tmp:
            sock.close()
            return

        answer = sock.recv(24)
        if not answer:
            sock.close()
            return
        answer_ = cnf.to_data_message_from_bytes_(answer)
        print("received ->" + str(answer_))
示例#3
0
    def _add_datas_in_packet(self, data):

        if not data:
            data_to_str = ''
        else:
            data_to_str = ''.join(data) # преобразование списка в строку
        self.packet = self.packet._replace(data=(str(self.packet.data) + data_to_str))

        self.packet = cnf.ntuple_data_message(
            self.packet.id,
            self.packet.cmd,
            self.packet.sender,
            self.packet.recv,
            self.packet.size_next,
            str(self.packet.data) + data_to_str
        )
示例#4
0
    def parse_message(self, mess):
        """
        аналог функции from_bytes_to_data_mesage(), только разбивает байты
        не используется
        :param mess: bytes
        :return: ntuple_data_message, size_next_mess
        """
        id_ = int(mess[cnf.id_slise])
        cmd = int(mess[cnf.cmd_slice])
        sender = int(mess[cnf.sender_slice])
        receiver = int(mess[cnf.receiver_slice])
        size_next_mess = int(mess[cnf.size_next_mess_slice])
        data = int(mess[cnf.data_slice])


        return cnf.ntuple_data_message(id_, cmd, sender, receiver, data, size_next_mess), size_next_mess