diff --git a/sampy/client/player.py b/sampy/client/player.py index 2bd6018..696c3f4 100644 --- a/sampy/client/player.py +++ b/sampy/client/player.py @@ -75,8 +75,8 @@ class PlayerClient(BaseClient): async def on_player_packet(self, packet: bytes): bitstream = Bitstream(packet) - has_acks = bitstream.read(0x01) - if has_acks: + _, has_acks = bitstream.read(0x01) + if has_acks[0]: logger.debug("Unfinished code hit; has_acks: True") return @@ -86,28 +86,28 @@ class PlayerClient(BaseClient): logger.debug("Internal packet were not handled") async def handle_internal_packet(self, bitstream: Bitstream) -> bool: - if (len(bitstream.buffer) * 8) - bitstream.offset < 0x10: + if (bitstream.length * 8) - bitstream.offset < 0x10: return False - message_number = bitstream.read(0x10) - reliability = bitstream.read(0x04) - isSplitPacket = bitstream.read(0x01) + _, message_number = bitstream.read(0x10) + _, reliability = bitstream.read(0x04) + _, is_split_packet = bitstream.read(0x01) - if isSplitPacket: + if is_split_packet[0]: logger.warning("Skipping split packet") return # Something I dont understand yet # TODO: ReadCompressed bitstream.offset += 1 - unknown = bitstream.read(0x01) - bit_length = bitstream.read(0x08) + _, unknown = bitstream.read(0x01) + _, bit_length = bitstream.read(0x08) ## logger.debug("bit_length: %d" % bit_length) logger.debug("bitstream: %s" % bitstream) # TODO: ReadAlignedBytes - data = bitstream.read(bit_length) + _, data = bitstream.read(bit_length) logger.debug("data: %s" % data) \ No newline at end of file diff --git a/sampy/raknet/bitstream.py b/sampy/raknet/bitstream.py index 4c6c948..f7e28f4 100644 --- a/sampy/raknet/bitstream.py +++ b/sampy/raknet/bitstream.py @@ -2,7 +2,7 @@ import ctypes as c from array import array -from typing import * +from typing import Tuple import logging logger = logging.getLogger(__name__) @@ -13,6 +13,14 @@ class Bitstream: self._offset = 0 self._buffer = bytearray(data) # array("B", data) + @property + def offset(self) -> int: + return self._offset + + @property + def length(self) -> int: + return len(self._buffer) + def _can_access_bits(self, bits_to_access: int) -> bool: return self._offset + bits_to_access <= len(self._buffer) << 3 diff --git a/sampy/server/compression.py b/sampy/server/compression.py index 06a81e1..bcca189 100644 --- a/sampy/server/compression.py +++ b/sampy/server/compression.py @@ -1,6 +1,8 @@ from ..shared import glob from ..struct.server import ServerConfig +from typing import Tuple + import logging logger = logging.getLogger(__name__) @@ -55,5 +57,5 @@ class StringCompressor: def __init__(self): pass - def decode_string(self, data: bytes) -> (str, int): + def decode_string(self, data: bytes) -> Tuple[str, int]: pass \ No newline at end of file