internal void Dispatch(int id, object msg, NetConnection conn)
        {
            try {
                // 特殊处理认证消息
                if (id == (int)RoomMessageDefine.Msg_CR_ShakeHands)
                {
                    Msg_CR_ShakeHands shakehandsMsg = msg as Msg_CR_ShakeHands;
                    if (shakehandsMsg == null)
                    {
                        return;
                    }
                    bool ret = RoomPeerMgr.Instance.OnPeerShakeHands(shakehandsMsg.auth_key, conn);
                    Msg_RC_ShakeHands_Ret builder = new Msg_RC_ShakeHands_Ret();
                    if (ret)
                    {
                        builder.auth_result = Msg_RC_ShakeHands_Ret.RetType.SUCCESS;
                        IOManager.Instance.SendMessage(conn, RoomMessageDefine.Msg_RC_ShakeHands_Ret, builder);
                    }
                    else
                    {
                        builder.auth_result = Msg_RC_ShakeHands_Ret.RetType.ERROR;
                        IOManager.Instance.SendUnconnectedMessage(conn, RoomMessageDefine.Msg_RC_ShakeHands_Ret, builder);
                        conn.Disconnect("disconnect");
                    }
                    return;
                }

                RoomPeer peer = RoomPeerMgr.Instance.GetPeerByConnection(conn);
                // 没有认证连接的消息不进行处理
                if (peer == null)
                {
                    Msg_RC_ShakeHands_Ret builder = new Msg_RC_ShakeHands_Ret();
                    builder.auth_result = Msg_RC_ShakeHands_Ret.RetType.ERROR;
                    IOManager.Instance.SendUnconnectedMessage(conn, RoomMessageDefine.Msg_RC_ShakeHands_Ret, builder);

                    conn.Disconnect("unauthed");
                    LogSys.Log(LOG_TYPE.DEBUG, "unauthed peer {0} got message {1}, can't deal it!", conn.RemoteEndPoint.ToString(), msg.ToString());
                    return;
                }

                // 直接转发消息(或进行其它处理)
                MsgHandler msghandler;
                if (m_DicHandler.TryGetValue(id, out msghandler))
                {
                    msghandler(msg, peer);
                }
                if (msg is Msg_Ping)
                {
                    return;
                }

                // 消息分发到peer
                RoomPeerMgr.Instance.DispatchPeerMsg(peer, id, msg);
            } catch (Exception ex) {
                LogSys.Log(LOG_TYPE.ERROR, "Exception {0}\n{1}", ex.Message, ex.StackTrace);
            }
        }
Beispiel #2
0
    internal static void Execute(object msg, NetConnection conn)
    {
        Msg_RC_ShakeHands_Ret ret_msg = msg as Msg_RC_ShakeHands_Ret;

        if (msg == null)
        {
            return;
        }
        NetworkSystem.Instance.WaitShakeHands = false;
        if (ret_msg.auth_result == Msg_RC_ShakeHands_Ret.RetType.SUCCESS)
        {
            LogSystem.Info("auth ok !!!");
            NetworkSystem.Instance.CanSendMessage = true;
            PluginFramework.Instance.QueueAction(PluginFramework.Instance.OnRoomServerConnected);
        }
        else
        {
            LogSystem.Info("auth failed !!!");
        }
    }
Beispiel #3
0
    internal static void Execute(object msg, NetConnection conn, NetworkSystem networkSystem)
    {
        Msg_RC_ShakeHands_Ret ret_msg = msg as Msg_RC_ShakeHands_Ret;

        if (msg == null)
        {
            return;
        }
        if (ret_msg.auth_result == Msg_RC_ShakeHands_Ret.RetType.SUCCESS)
        {
            networkSystem.CanSendMessage = true;
            LogSystem.Debug("{0} auth ok !!! {1}", networkSystem.Robot.LobbyNetworkSystem.User, LobbyRobot.Robot.GetDateTime());

            ArkCrossEngineMessage.Msg_CRC_Create build = new ArkCrossEngineMessage.Msg_CRC_Create();
            networkSystem.SendMessage(build);
            LogSystem.Debug("{0} send Msg_CRC_Create to roomserver {1}", networkSystem.Robot.LobbyNetworkSystem.User, LobbyRobot.Robot.GetDateTime());
        }
        else
        {
            LogSystem.Debug("{0} auth failed !!! {1}", networkSystem.Robot.LobbyNetworkSystem.User, LobbyRobot.Robot.GetDateTime());
            networkSystem.WaitDisconnect();
        }
    }
Beispiel #4
0
        internal void Dispatch(object msg, NetConnection conn)
        {
            try
            {
                // 特殊处理机器人系统消息

                /*if (msg.GetType() == typeof(Lobby_RoomServer.Msg_LR_CreateBattleRoom)) {
                 * LobbyMsgHandler lobby_msghandler;
                 * if (m_SpecialHandlers.TryGetValue(msg.GetType(), out lobby_msghandler)) {
                 *  lobby_msghandler.Invoke(msg, conn);
                 * }
                 * return;
                 * }*/

                // 特殊处理认证消息
                if (msg.GetType() == typeof(Msg_CR_ShakeHands))
                {
                    Msg_CR_ShakeHands shakehandsMsg = msg as Msg_CR_ShakeHands;
                    if (shakehandsMsg == null)
                    {
                        return;
                    }
                    bool ret = RoomPeerMgr.Instance.OnPeerShakeHands(shakehandsMsg.auth_key,
                                                                     conn);
                    Msg_RC_ShakeHands_Ret builder = new Msg_RC_ShakeHands_Ret();
                    if (ret)
                    {
                        builder.auth_result = Msg_RC_ShakeHands_Ret.RetType.SUCCESS;
                        IOManager.Instance.SendMessage(conn, builder);
                    }
                    else
                    {
                        builder.auth_result = Msg_RC_ShakeHands_Ret.RetType.ERROR;
                        IOManager.Instance.SendUnconnectedMessage(conn, builder);
                    }
                    return;
                }

                RoomPeer peer = RoomPeerMgr.Instance.GetPeerByConnection(conn);
                // 没有认证连接的消息不进行处理
                if (peer == null)
                {
                    Msg_RC_ShakeHands_Ret builder = new Msg_RC_ShakeHands_Ret();
                    builder.auth_result = Msg_RC_ShakeHands_Ret.RetType.ERROR;
                    IOManager.Instance.SendUnconnectedMessage(conn, builder);

                    conn.Disconnect("unauthed");
                    LogSys.Log(LOG_TYPE.DEBUG, "unauthed peer {0} got message {1}, can't deal it!", conn.RemoteEndPoint.ToString(), msg.ToString());
                    return;
                }

                // 直接转发消息(或进行其它处理)
                MsgHandler msghandler;
                if (m_DicHandler.TryGetValue(msg.GetType(), out msghandler))
                {
                    //object[] param = new object[] { msg, peer };
                    msghandler.Invoke(msg, peer);
                }
                if (msg is Msg_Ping)
                {
                    return;
                }

                // 消息分发到peer
                RoomPeerMgr.Instance.DispatchPeerMsg(peer, msg);
            }
            catch (Exception ex)
            {
                LogSys.Log(LOG_TYPE.ERROR, "Exception {0}\n{1}", ex.Message, ex.StackTrace);
            }
        }