Prepare for Upload mods

This commit is contained in:
Maxim Khomutov 2023-07-13 02:35:38 +03:00
parent d21798aaf1
commit 6e46af4c13
4 changed files with 40 additions and 18 deletions

View File

@ -23,6 +23,7 @@ class Client:
def __init__(self, reader, writer, core): def __init__(self, reader, writer, core):
self.reader = reader self.reader = reader
self.writer = writer self.writer = writer
self.down_rw = (None, None)
self.log = utils.get_logger("client(None:0)") self.log = utils.get_logger("client(None:0)")
self.addr = writer.get_extra_info("sockname") self.addr = writer.get_extra_info("sockname")
self.loop = asyncio.get_event_loop() self.loop = asyncio.get_event_loop()
@ -108,18 +109,31 @@ class Client:
return data return data
async def sync_resources(self): async def sync_resources(self):
await self.tcp_send(b"P" + bytes(f"{self.cid}", "utf-8")) while True:
data = await self.recv() data = await self.recv()
if data.startswith(b"SR"): if data.startswith(b"f"):
await self.tcp_send(b"-") # Cannot handle mods for now. # TODO: SendFile
data = await self.recv() pass
if data == b"Done": elif data.startswith(b"SR"):
await self.tcp_send(b"M/levels/" + bytes(config.Game['map'], 'utf-8') + b"/info.json") # TODO: Create mods list
await self.last_handle() self.log.debug("Sending Mod Info")
mods = []
mod_list = b''
# * code *
if len(mods) == 0:
await self.tcp_send(b"-")
else:
await self.tcp_send(mod_list)
data = await self.recv()
if data == b"Done":
await self.tcp_send(b"M/levels/" + bytes(config.Game['map'], 'utf-8') + b"/info.json")
break
async def last_handle(self): async def looper(self):
# self.is_disconnected() # self.is_disconnected()
self.log.debug(f"Alive: {self.alive}") self.log.debug(f"Alive: {self.alive}")
await self.tcp_send(b"P" + bytes(f"{self.cid}", "utf-8"))
await self.sync_resources()
while self.alive: while self.alive:
data = await self.recv() data = await self.recv()
if data == b"": if data == b"":

View File

@ -19,6 +19,7 @@ class Client:
def __init__(self, reader: StreamReader, writer: StreamWriter, core: Core) -> "Client": def __init__(self, reader: StreamReader, writer: StreamWriter, core: Core) -> "Client":
self.reader = reader self.reader = reader
self.writer = writer self.writer = writer
self.down_rw: Tuple[StreamReader, StreamWriter] | Tuple[None, None] = (None, None)
self.log = utils.get_logger("client(id: )") self.log = utils.get_logger("client(id: )")
self.addr = writer.get_extra_info("sockname") self.addr = writer.get_extra_info("sockname")
self.loop = asyncio.get_event_loop() self.loop = asyncio.get_event_loop()
@ -34,7 +35,7 @@ class Client:
async def tcp_send(self, data: bytes) -> None: ... async def tcp_send(self, data: bytes) -> None: ...
async def sync_resources(self) -> None: ... async def sync_resources(self) -> None: ...
async def recv(self) -> bytes: ... async def recv(self) -> bytes: ...
async def last_handle(self) -> bytes: ... async def looper(self) -> None: ...
def _update_logger(self) -> None: ... def _update_logger(self) -> None: ...

View File

@ -68,22 +68,29 @@ class TCPServer:
return True, client return True, client
async def handle_download(self, writer): async def set_down_rw(self, reader, writer):
# TODO: HandleDownload try:
self.log.debug(f"Client: \"IP: {0!r}; ID: {0}\" - HandleDownload!") cid = (await reader.read(1)).decode() # FIXME: wtf? 1 byte?
return False self.log.debug(f"Client: \"ID: {cid}\" - HandleDownload!")
if not cid.isdigit():
return False
for _client in self.Core.clients:
if _client.cid == cid:
_client.down_rw = (reader, writer)
return True
finally:
return False
async def handle_code(self, code, reader, writer): async def handle_code(self, code, reader, writer):
match code: match code:
case "C": case "C":
result, client = await self.auth_client(reader, writer) result, client = await self.auth_client(reader, writer)
if result: if result:
await client.sync_resources() await client.looper()
# await client.kick("Authentication success! Server not ready.")
return True return True
return False return False
case "D": case "D":
return await self.handle_download(writer) return await self.set_down_rw(reader, writer)
case "P": case "P":
writer.write(b"P") writer.write(b"P")
await writer.drain() await writer.drain()

View File

@ -20,7 +20,7 @@ class TCPServer:
self.port = port self.port = port
self.loop = asyncio.get_event_loop() self.loop = asyncio.get_event_loop()
async def auth_client(self, reader: StreamReader, writer: StreamWriter) -> Tuple[bool, Client]: ... async def auth_client(self, reader: StreamReader, writer: StreamWriter) -> Tuple[bool, Client]: ...
async def handle_download(self, writer: StreamWriter) -> bool: ... async def set_down_rw(self, reader: StreamReader, writer: StreamWriter) -> bool: ...
async def handle_code(self, code: str, reader: StreamReader, writer: StreamWriter) -> bool: ... async def handle_code(self, code: str, reader: StreamReader, writer: StreamWriter) -> bool: ...
async def handle_client(self, reader: StreamReader, writer: StreamWriter) -> None: ... async def handle_client(self, reader: StreamReader, writer: StreamWriter) -> None: ...
async def start(self) -> None: ... async def start(self) -> None: ...