Esempio n. 1
0
 def _accept(self):
     conn = None
     try:
         conn, addr = self._receive_socket.accept()
         print(addr)
         with self.lock:
             info = Packet.parse(conn.recv(self.packet_size))
             if info.type is PacketType.CONNECTION:
                 conn.send(bytes(Packet(PacketType.CONFIRMATION)))
                 time.sleep(2)  # TODO
                 info = Packet.parse(conn.recv(self.packet_size))
                 if info.type is PacketType.CONFIRMATION:
                     self._connections.append(conn)
                     new_reader = reader.Reader(conn, self.packet_size)
                     self._readers.append(new_reader)
                     new_reader.run()
                     self.ip_list.add(addr[0] + ':' + info.data)
                     self.send(
                         Packet(PacketType.IP,
                                '/' + addr[0] + ':' + info.data))
                     print('accepted')
     except OSError:
         if conn is not None:
             conn.close()
Esempio n. 2
0
 def _process(self, data: bytes):
     message = Packet.parse(data)
     if message.id in self.received:
         return
     self.received.add(message.id)
     if message.type is PacketType.MESSAGE or message.type is PacketType.ONLINE:
         self.got_messages.put(message)
         self.send(message)
     if message.type is PacketType.IP:
         cur_id, addr = message.data.split('/')
         self.ip_list.add(addr)
         self.send(message)
     if message.type is PacketType.GET_IP:
         self.send(message)
         for ip in self.ip_list:
             self.send(
                 Packet(PacketType.IP, '{}/{}'.format(message.data, ip)))
Esempio n. 3
0
 def _connect(self, chat_host, chat_port: int):
     connection = socket.socket()
     connection.connect((chat_host, chat_port))
     connection.send(bytes(Packet(PacketType.CONNECTION)))
     info = b''
     while len(info) == 0:
         time.sleep(1)  # TODO
         info = connection.recv(self.packet_size)
     info = Packet.parse(info)
     if info.type is PacketType.CONFIRMATION:
         self._connections.append(connection)
         connection.send(
             bytes(Packet(PacketType.CONFIRMATION, str(self._server_port))))
         self._par_conn = connection
         print('connected')
         new_reader = reader.Reader(connection, self.packet_size)
         self._readers.append(new_reader)
         new_reader.run()
         self.ip_list.add(chat_host + ':' + str(chat_port))
         time.sleep(1)  # TODO
         question = Packet(PacketType.GET_IP)
         self.send(question)
         self.received.add(question.id)
         self._question_id = question.id