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); } }
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 !!!"); } }
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(); } }
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); } }