mirror of
https://github.com/kuitoi/kuitoi-Server.git
synced 2025-08-17 08:15:42 +00:00
Prepare for Upload mods
This commit is contained in:
parent
d21798aaf1
commit
6e46af4c13
@ -23,6 +23,7 @@ class Client:
|
||||
def __init__(self, reader, writer, core):
|
||||
self.reader = reader
|
||||
self.writer = writer
|
||||
self.down_rw = (None, None)
|
||||
self.log = utils.get_logger("client(None:0)")
|
||||
self.addr = writer.get_extra_info("sockname")
|
||||
self.loop = asyncio.get_event_loop()
|
||||
@ -108,18 +109,31 @@ class Client:
|
||||
return data
|
||||
|
||||
async def sync_resources(self):
|
||||
await self.tcp_send(b"P" + bytes(f"{self.cid}", "utf-8"))
|
||||
while True:
|
||||
data = await self.recv()
|
||||
if data.startswith(b"SR"):
|
||||
await self.tcp_send(b"-") # Cannot handle mods for now.
|
||||
if data.startswith(b"f"):
|
||||
# TODO: SendFile
|
||||
pass
|
||||
elif data.startswith(b"SR"):
|
||||
# TODO: Create mods list
|
||||
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")
|
||||
await self.last_handle()
|
||||
break
|
||||
|
||||
async def last_handle(self):
|
||||
async def looper(self):
|
||||
# self.is_disconnected()
|
||||
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:
|
||||
data = await self.recv()
|
||||
if data == b"":
|
||||
|
@ -19,6 +19,7 @@ class Client:
|
||||
def __init__(self, reader: StreamReader, writer: StreamWriter, core: Core) -> "Client":
|
||||
self.reader = reader
|
||||
self.writer = writer
|
||||
self.down_rw: Tuple[StreamReader, StreamWriter] | Tuple[None, None] = (None, None)
|
||||
self.log = utils.get_logger("client(id: )")
|
||||
self.addr = writer.get_extra_info("sockname")
|
||||
self.loop = asyncio.get_event_loop()
|
||||
@ -34,7 +35,7 @@ class Client:
|
||||
async def tcp_send(self, data: bytes) -> None: ...
|
||||
async def sync_resources(self) -> None: ...
|
||||
async def recv(self) -> bytes: ...
|
||||
async def last_handle(self) -> bytes: ...
|
||||
async def looper(self) -> None: ...
|
||||
def _update_logger(self) -> None: ...
|
||||
|
||||
|
||||
|
@ -68,9 +68,17 @@ class TCPServer:
|
||||
|
||||
return True, client
|
||||
|
||||
async def handle_download(self, writer):
|
||||
# TODO: HandleDownload
|
||||
self.log.debug(f"Client: \"IP: {0!r}; ID: {0}\" - HandleDownload!")
|
||||
async def set_down_rw(self, reader, writer):
|
||||
try:
|
||||
cid = (await reader.read(1)).decode() # FIXME: wtf? 1 byte?
|
||||
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):
|
||||
@ -78,12 +86,11 @@ class TCPServer:
|
||||
case "C":
|
||||
result, client = await self.auth_client(reader, writer)
|
||||
if result:
|
||||
await client.sync_resources()
|
||||
# await client.kick("Authentication success! Server not ready.")
|
||||
await client.looper()
|
||||
return True
|
||||
return False
|
||||
case "D":
|
||||
return await self.handle_download(writer)
|
||||
return await self.set_down_rw(reader, writer)
|
||||
case "P":
|
||||
writer.write(b"P")
|
||||
await writer.drain()
|
||||
|
@ -20,7 +20,7 @@ class TCPServer:
|
||||
self.port = port
|
||||
self.loop = asyncio.get_event_loop()
|
||||
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_client(self, reader: StreamReader, writer: StreamWriter) -> None: ...
|
||||
async def start(self) -> None: ...
|
||||
|
Loading…
x
Reference in New Issue
Block a user