def register_user_socket_closed_handler( cls: MessageType, handler: Callable[[SocketSession], None] ): if cls in _user_socket_close_handler_map: logger.warning("register_user_socket_close_handler, Type:%s exists" % str(cls)) _user_socket_close_handler_map[cls] = handler pass
def register_user_handler( cls: MessageType, handler: Callable[[SocketSession, object], Coroutine] ): if cls in _user_message_handler_map: logger.warning("register_user_handler, Type:%s exists" % str(cls)) _user_message_handler_map[cls] = handler pass
async def send_message(self, msg: object, session_id=0): socket_session = self._socket if session_id != 0: session = _session_manager.get_session(session_id) if session: socket_session = session if socket_session: await socket_session.send_message(msg) else: logger.warning( "Actor.SendMessage, Actor:%s/%s , SocketSession not found" % (self.type_name, self.uid))
async def _gc_loop(self): dead_list: List[SocketSession] = list() while True: logger.trace("gc_loop") current_time = time.time() for item in self._session_dict.values(): if item.is_dead(current_time): dead_list.append(item) for item in dead_list: self.remove_session(item.session_id) logger.warning("SocketSessionManager.gc_loop, SessionID:%d" % item.session_id) dead_list.clear() await asyncio.sleep(SOCKET_GC_INTERVAL) pass
async def _dispatch_user_message_slow(session: SocketSession, actor_type: str, actor_id: str, msg: object): node = await Placement.instance().find_position(actor_type, actor_id) if node is not None and node.server_uid == Placement.instance().server_id( ): actor = _entity_manager.get_or_new_by_name(actor_type, actor_id) if actor is None: raise RpcException.entity_not_found() actor_message_loop.run_actor_message_loop(actor) await actor_message_loop.dispatch_actor_message(actor, session, msg) else: if node: node_session = node.session if node_session: await node_session.send_message(msg) else: logger.warning("Actor:%s/%s, cannot find position" % (actor_type, actor_id)) pass
async def process_gateway_account_login(session: SocketSession, msg: object): request = cast(RpcMessage, msg) req = cast(RequestAccountLogin, request.meta) body = request.body body_message: dict = utils.json_loads(body if body else b"{}") resp = ResponseAccountLogin() resp.session_id = req.session_id resp.actor_type = body_message.get("actor_type", "IPlayer") resp.actor_id = body_message.get("actor_id", "1") logger.warning( "process_gateway_account_login, MUST REWRITE THIS FUNCTION, " "SessionID:%s, OpenID:%s, ServerID:%s, Body:%s, DestActor:%s/%s" % ( req.session_id, req.open_id, req.server_id, body_message, resp.actor_type, resp.actor_id, )) await session.send_message(resp)