From bfbf1bb2abd74cda98cc41b684f00b8ef97de75d Mon Sep 17 00:00:00 2001 From: Naruse <71993948+DevilProMT@users.noreply.github.com> Date: Fri, 8 Nov 2024 11:05:39 +0800 Subject: [PATCH] refactor: move cmd_id into net --- game_server/{protocol => net}/cmd_id.py | 0 game_server/net/gateway.py | 10 ++++---- game_server/net/packet.py | 2 +- game_server/net/session.py | 34 ++++++++++++++----------- 4 files changed, 25 insertions(+), 21 deletions(-) rename game_server/{protocol => net}/cmd_id.py (100%) diff --git a/game_server/protocol/cmd_id.py b/game_server/net/cmd_id.py similarity index 100% rename from game_server/protocol/cmd_id.py rename to game_server/net/cmd_id.py diff --git a/game_server/net/gateway.py b/game_server/net/gateway.py index 1472cff..1bded76 100644 --- a/game_server/net/gateway.py +++ b/game_server/net/gateway.py @@ -1,7 +1,8 @@ -from game_server.config.log import Info +from utils.logger import Info from game_server.net.session import Session import asyncio + class Gateway: def __init__(self, server_ip, game_server_port) -> None: self.server_ip = server_ip @@ -16,10 +17,9 @@ class Gateway: async def start_server(self): session = Session() - server = await asyncio.start_server(session.handle_connection, self.server_ip, self.game_server_port) + server = await asyncio.start_server( + session.handle_connection, self.server_ip, self.game_server_port + ) Info("Gateway listening...") async with server: await server.serve_forever() - - - diff --git a/game_server/net/packet.py b/game_server/net/packet.py index d402b5c..94936fc 100644 --- a/game_server/net/packet.py +++ b/game_server/net/packet.py @@ -1,5 +1,5 @@ import struct -from game_server.protocol.cmd_id import CmdID +from game_server.net.cmd_id import CmdID class Packet: def __init__(self, buf: bytes): diff --git a/game_server/net/session.py b/game_server/net/session.py index 82e1349..8a063bb 100644 --- a/game_server/net/session.py +++ b/game_server/net/session.py @@ -1,5 +1,5 @@ -from game_server.config.log import Error, Info -from game_server.protocol.cmd_id import CmdID +from utils.logger import Error, Info +from game_server.net.cmd_id import CmdID from game_server.net.packet import Packet from lib import proto as protos import traceback @@ -11,7 +11,8 @@ from game_server.game.player import Player class Session: - player : Player + player: Player + def __init__(self) -> None: self.writer = None self.pending_notifies = [] @@ -28,12 +29,12 @@ class Session: except Exception as ex: Error(f"Error in KeepAliveLoop: {ex}") break - + await asyncio.sleep(3) async def handle_connection(self, reader, writer): self.writer = writer - addr = writer.get_extra_info('peername') + addr = writer.get_extra_info("peername") Info(f"Accepted connection from {addr}") prefix = bytes([0x01, 0x23, 0x45, 0x67]) @@ -41,7 +42,7 @@ class Session: try: while True: - data = await reader.read(1 << 16) + data = await reader.read(1 << 16) if not data: break @@ -59,7 +60,7 @@ class Session: end = segment.find(suffix, start) if end == -1: break - + end += len(suffix) packets.append(segment[start:end]) offset += end @@ -82,14 +83,14 @@ class Session: def create_packet(self, proto_message: betterproto.Message) -> Packet: return Packet.send_packet(proto_message) - def is_valid_packet(self,data: bytes) -> bool: + def is_valid_packet(self, data: bytes) -> bool: hex_string = data.hex().upper() return hex_string.startswith("01234567") and hex_string.endswith("89ABCDEF") - + def pending_notify(self, proto_message: betterproto.Message): packet = Packet.send_packet(proto_message) self.pending_notifies.append(packet) - + def send_pending_notifies_in_thread(self): thread = threading.Thread(target=self._run_send_pending_notifies) thread.start() @@ -99,18 +100,19 @@ class Session: asyncio.set_event_loop(loop) loop.run_until_complete(self._send_pending_notifies()) loop.close() - + async def _send_pending_notifies(self): for packet in self.pending_notifies: await self.send(packet) self.pending_notifies.clear() - async def process_packet(self, packet : Packet): + async def process_packet(self, packet: Packet): if packet.cmd_id not in CmdID._value2member_map_: Error(f"CmdId {packet.cmd_id} not recognized!") return request_name = CmdID(packet.cmd_id).name - if request_name == "KeepAliveNotify": return #await self.send(packet.send_packet(protos.KeepAliveNotify())) + if request_name == "KeepAliveNotify": + return # await self.send(packet.send_packet(protos.KeepAliveNotify())) try: try: req: betterproto.Message = getattr(protos, request_name)() @@ -120,7 +122,9 @@ class Session: try: Info(f"RECV packet: {request_name} ({packet.cmd_id})") - handle_module = importlib.import_module(f"game_server.packet.handlers.{request_name}") + handle_module = importlib.import_module( + f"game_server.packet.handlers.{request_name}" + ) handle_function = handle_module.handle handle_result = await handle_function(self, req) if not handle_result: @@ -150,4 +154,4 @@ class Session: Info(f"Sent packet: {packet_name} ({packet.cmd_id})") except Exception as ex: Error(f"Failed to send {packet_name}: {ex}") - traceback.print_exc() \ No newline at end of file + traceback.print_exc()