コード例 #1
0
ファイル: koala_host.py プロジェクト: egmkang/koala
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
コード例 #2
0
ファイル: koala_host.py プロジェクト: egmkang/koala
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
コード例 #3
0
 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))
コード例 #4
0
 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
コード例 #5
0
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
コード例 #6
0
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)