Exemplo n.º 1
0
 def handle_packet(self):
     packet = self.server.read_thread_to_main_packet()
     if packet is None:
         return
     packet_id = ord(packet[0])
     offset = 1
     if packet_id == PyRakLib.PACKET_ENCAPSULATED:
         offset += 1
         length = ord(packet[offset])
         identifier = packet[offset:length]
         offset += length
         flags = ord(packet[offset])
         buffer = packet[offset]
         self.instance.handle_encapsulated(
             identifier, EncapsulatedPacket.from_internal_binary(buffer),
             flags)
     elif packet_id == PyRakLib.PACKET_RAW:
         length = ord(packet[offset + 1])
         address = packet[offset:length]
         offset += length
         port = Binary.read_short(packet[offset:2])
         offset += 2
         payload = packet[offset:]
         self.instance.handle_raw(address, port, payload)
     elif packet_id == PyRakLib.PACKET_SET_OPTION:
         length = ord(packet[offset + 1])
         name = packet[offset:length]
         offset += length
         value = packet[offset:]
         self.instance.handle_option(name, value)
     elif packet_id == PyRakLib.PACKET_OPEN_SESSION:
         length = ord(packet[offset + 1])
         identifier = packet[offset:length]
         offset += length
         length = ord(packet[offset + 1])
         address = packet[offset:length]
         offset += length
         port = Binary.read_short(packet[offset:2])
         offset += 2
         client_id = Binary.read_long(packet[offset:8])
         self.instance.open_session(identifier, address, port, client_id)
     elif packet_id == PyRakLib.PACKET_CLOSE_SESSION:
         length = ord(packet[offset + 1])
         identifier = packet[offset:length]
         offset += length
         length = ord(packet[offset + 1])
         reason = packet[offset:length]
         self.instance.close_session(identifier, reason)
     elif packet_id == PyRakLib.PACKET_INVALID_SESSION:
         length = ord(packet[offset + 1])
         identifier = packet[offset:length]
         self.instance.close_session(identifier, "Invalid session")
     elif packet_id == PyRakLib.PACKET_ACK_NOTIFICATION:
         length = ord(packet[offset + 1])
         identifier = packet[offset:length]
         offset += length
         identifier_ack = Binary.read_int(packet[offset:4])
         self.instance.notify_ack(identifier, identifier_ack)
     elif packet_id == PyRakLib.PACKET_REPORT_PING:
         length = ord(packet[offset + 1])
         identifier = packet[offset:length]
         offset += length
         ping_ms = Binary.read_int(packet[offset:4])
         self.instance.update_ping(identifier, ping_ms)
     return False
Exemplo n.º 2
0
 def get_long(self) -> int:
     return Binary.read_long(self.get(8))