示例#1
0
    def append(self, packet: GamePacket) -> None:
        """Append batch request.

        :param packet: game packet
        """
        _logger.debug('< %s', LogString(packet))
        self._packets.append((RELIABILITY_DICT[packet.type], packet))
示例#2
0
 def push(self,
          payload: bytes,
          reliability: Reliability,
          send_time_in_future=0) -> None:
     for frame in self._create_frame(payload, reliability):
         _logger.debug('< %s', LogString(frame))
         self._queue.put(self._get_current_time() + send_time_in_future,
                         frame)
示例#3
0
 def perform(self, action: Action) -> None:
     action = self._world_extension.filter_action(action)
     if action is None:
         _logger.info('%s was filtered.', action)
         return
     _logger.debug('>> %s', LogString(action))
     asyncio.get_event_loop().call_soon(
         getattr(self, '_process_' + action.type.name.lower()), action)
示例#4
0
 def datagram_received(self, data: bytes, addr: Address) -> None:
     _logger.debug('%s > %s', addr, data.hex())
     packet = raknet_packet_codec.decode(data)
     _logger.debug('> %s', LogString(packet))
     try:
         getattr(self, '_process_' + packet.type.name.lower())(packet, addr)
     except SessionNotFound as exc:
         assert exc.addr == addr, '{} != {}'.format(exc.addr, addr)
         _logger.info('%s session is not found.', addr)
         self.remove_session(addr)
示例#5
0
    def send_connection_packet(self, packet: ConnectionPacket, addr: Address, reliability: Reliability) -> None:
        """Send connection packet to specified address.

        :param packet: connection packet
        :param addr: destination
        :param reliability: frame reliability
        """
        _logger.debug('< %s', LogString(packet))
        self._get_protocol(addr).game_data_received(
            connection_packet_codec.encode(packet), addr, reliability)
示例#6
0
 def _process_batch(self, packet: ConnectionPacket, addr: Address) -> None:
     for i, data in enumerate(packet.payloads):
         try:
             packet = game_packet_codec.decode(data)
             _logger.debug('> %s', LogString(packet))
             getattr(self, '_process_' + packet.type.name.lower())(packet, addr)
         except SessionNotFound:
             raise
         except Exception as exc:
             _logger.exception('%s', exc)
     self.send_waiting_game_packet(addr)
示例#7
0
 def _process_frames(self, frames: List[RakNetFrame]) -> None:
     for frame in frames:
         _logger.debug('> %s', LogString(frame))
         getattr(self, '_process_' + frame.type.name.lower())(frame)
示例#8
0
 def send_to_remote(self, packet: RakNetPacket, addr: Address) -> None:
     _logger.debug('< %s', LogString(packet))
     data = raknet_packet_codec.encode(packet)
     _logger.debug('%s < %s', addr, data.hex())
     self.__transport.sendto(data, addr)
示例#9
0
 def data_received(self, data: bytes, addr: Address) -> None:
     packet = connection_packet_codec.decode(data)
     _logger.debug('> %s', LogString(packet))
     getattr(self, '_process_' + packet.type.name.lower())(packet, addr)
示例#10
0
 async def next_event(self) -> Optional[Event]:
     event = await self._event_queue.get()
     _logger.debug('<< %s', LogString(event))
     return event