Protocol fixes

This commit is contained in:
Maxim Khomutov 2023-07-27 02:05:49 +03:00
parent a7c02e0b52
commit de91d075b4
2 changed files with 16 additions and 5 deletions

View File

@ -194,7 +194,13 @@ class Client:
async def _recv(self, one=False): async def _recv(self, one=False):
while self.__alive: while self.__alive:
try: try:
header = await self.__reader.read(4) header = b""
while len(header) < 4 and self.__alive:
h = await self.__reader.read(4)
if not h:
break
else:
header += h
int_header = int.from_bytes(header, byteorder='little', signed=True) int_header = int.from_bytes(header, byteorder='little', signed=True)
@ -219,9 +225,14 @@ class Client:
self.__packets_queue.append(None) self.__packets_queue.append(None)
continue continue
data = await self.__reader.read(int_header) data = b""
while len(data) < int_header and self.__alive:
buffer = await self.__reader.read(int_header - len(data))
if not buffer:
break
else:
data += buffer
# self.log.debug(f"int_header: {int_header}; data: `{data}`;")
abg = b"ABG:" abg = b"ABG:"
if len(data) > len(abg) and data.startswith(abg): if len(data) > len(abg) and data.startswith(abg):
data = zlib.decompress(data[len(abg):]) data = zlib.decompress(data[len(abg):])

View File

@ -100,8 +100,8 @@ class UDPServer(asyncio.DatagramTransport):
await asyncio.sleep(0.2) await asyncio.sleep(0.2)
except OSError as e: except OSError as e:
self.run = False # self.run = False
self.Core.run = False # self.Core.run = False
self.log.error(f"Cannot bind port or other error: {e}") self.log.error(f"Cannot bind port or other error: {e}")
except Exception as e: except Exception as e:
self.log.error(f"Error: {e}") self.log.error(f"Error: {e}")