Ejemplo n.º 1
0
        private void AddLoginServerProtocol(EProtocolId protocolId, System.Type type)
        {
            int protocolIdInt = (int)protocolId;

            _loginServerProtocolDic[protocolIdInt] = type;
            _loginServerProtocolDicReverse[type]   = protocolIdInt;
        }
Ejemplo n.º 2
0
        // 处理消息
        public static void ProcessMessage(byte[] Buffer)
        {
            var nbs = new NetBitStream();

            nbs.BeginRead(Buffer);
            EProtocolId id = (EProtocolId)nbs.ReadProtocolHeader();

            //Debug($"处理协议->  {id} -> {(int)id} ......");

            if (EventHandler != null)
            {
                EventHandler(Buffer);
                return;
            }

            if (!DictProtocolEvent.TryGetValue(id, out var protocolevent))
            {
                Debug(string.Format("未注册协议->  {0} -> {1} ......", id, (int)id));
                return;
            }
            try
            {
                //处理
                protocolevent.ExecuteProtocolEvent(Buffer);
            }
            catch (Exception ex)
            {
                Error(string.Format("处理协议->  {0} -> {1}出错 ex:{2}", id, (int)id, ex.Message));
            }
        }
Ejemplo n.º 3
0
 /// <summary>
 /// 绑定注册(立即)
 /// </summary>
 /// <param name="handle"></param>
 /// <param name="id"></param>
 public static void BindEventHandler(DispatcherEventHandler handle, EProtocolId id)
 {
     try
     {
         DictProtocolEvent[id] = handle;
         loger.Info($"注册消息 {id,-30} -> {(int)id,-10} 成功!");
     }
     catch
     {
         loger.Warn($"注册消息 {id,-30} -> {(int)id,-10} 失败!");
     }
 }
Ejemplo n.º 4
0
 //绑定注册
 public static void BindEventHandler(DispatcherEventHandler handle, EProtocolId id)
 {
     try
     {
         ProtocolEvent Event = new ProtocolEvent();
         Event.EventHandler += new DispatcherEventHandler(handle);
         DictProtocolEvent.Add(id, Event);
         Debug(string.Format("注册消息->  {0,-30} -> {1,-10} 成功", id, (int)id));
     }
     catch
     {
         Error(string.Format("注册消息->  {0,-30} -> {1,-10} 失败", id, (int)id));
     }
 }
Ejemplo n.º 5
0
        /// <summary>
        /// 处理消息立即
        /// </summary>
        /// <param name="session"></param>
        /// <param name="requestInfo"></param>
        public static void ProcessMessage(LunarSession session, LunarRequestInfo requestInfo)
        {
            EProtocolId id = (EProtocolId)requestInfo.ProtocolID;

            if (id == EProtocolId.C2S_SERVER_CONNECT)
            {
                var sessiontemp = GetSession(session.SessionID);
                if (sessiontemp != null)
                {
                    var Req = new C2S_Server_Connect(requestInfo.Body);
                    sessiontemp.SessionType = Req.SessionType;
                    loger.Debug($"连接类型:{(EServerType)sessiontemp.SessionType}");
                }
                else
                {
                    loger.Error($"连接不存在:{session.SessionUuid}");
                }
                return;
            }

            if (DictProtocolEvent.TryGetValue(id, out DispatcherEventHandler handle))
            {
                try
                {
                    var StopwatchProcess = Stopwatch.StartNew();
                    handle(session, requestInfo);
                    StopwatchProcess.Stop();
                    var UseMs = StopwatchProcess.ElapsedMilliseconds;
                    if (UseMs > 500)
                    {
                        loger.Error($"消息处理超时,消息:{id} 玩家ID:{session.SessionUuid} 耗时:{UseMs} Ms__{CountMsgs}");
                    }
                }
                catch (Exception e)
                {
                    loger.Fatal($"处理协议->  {id} -> {(int)id}出错 玩家ID:{session.SessionUuid}", e);
                    Result(session, EProtocolResult.失败);
                    return;
                }
            }
            else
            {
                loger.Fatal($"处理协议->  {id} -> {(int)id} 未注册");
                Result(session, EProtocolResult.失败);
                return;
            }
        }
Ejemplo n.º 6
0
        public static void ProcessMessage(LunarSession session, LunarRequestInfo requestInfo)
        {
            EProtocolId id = (EProtocolId)requestInfo.ProtocolID;

            loger.Info($"中转{(EServerType)session.SessionType} 协议->{id} -> {session.SessionUuid} 。");
            var objMsg = ProtocolDump.Dump(id, requestInfo.Body);

            if (objMsg == null)
            {
                loger.Warn("错误协议!");
                return;
            }

            //登录服务器消息
            if (id > EProtocolId.L2E_GAME_START && id < EProtocolId.L2E_GAME_END)
            {
                //检测连接状态
                ESessionState SessionState = (ESessionState)session.SessionState;
                if (SessionState == ESessionState.Logined)
                {
                    loger.Warn($"已登陆收到登陆协议->  {id} -> {(int)id} 。");
                    return;
                }
                else
                {   //后期人多则会添加登录服务器获取人少的服
                    ((ProtocolMsgBase)objMsg).Shuttle = session.SessionID;
                    SendToLogin(objMsg);
                }
            }
            else if (id > EProtocolId.B2T_GM_START && id < EProtocolId.B2T_GM_END)
            {
                if (session.SessionType != (short)EServerType.后台工具)
                {
                    loger.Warn($"错误的GM协议->  {id} -> {(int)id} 。");
                    return;
                }
            }
            //游戏服消息
            else
            {
                ((ProtocolMsgBase)objMsg).Puid = session.SessionUuid;
                SendToGame(objMsg);
            }
        }
Ejemplo n.º 7
0
        private static void GateEventHandler(byte[] buffer)
        {
            var nbs = new NetBitStream();

            nbs.BeginRead(buffer);
            EProtocolId id     = (EProtocolId)nbs.ReadProtocolHeader();
            var         objMsg = ProtocolDump.Dump(id, buffer);

            if (objMsg == null)
            {
                loger.Error($"错误协议!{id}");
                return;
            }
            if (ClientDispatcher.DictProtocolEvent.TryGetValue(id, out var protocolevent))
            {
                protocolevent.ExecuteProtocolEvent(buffer);
                return;
            }

            if ((int)id < 100)
            {
                return;
            }
            long puid = ((ProtocolMsgBase)objMsg).Puid;

            if (puid == 0 && ((ProtocolMsgBase)objMsg).RspPuids.Count == 0)
            {
                loger.Error($"发送客户端消息错误,无发送目标!");
                return;
            }
            List <long> rspId = new List <long>();

            if (puid != 0)
            {
                rspId.Add(puid);
            }
            if (((ProtocolMsgBase)objMsg).RspPuids.Count > 0)
            {
                rspId.AddRange(((ProtocolMsgBase)objMsg).RspPuids);
            }
            SendMsg(objMsg, rspId);
        }
Ejemplo n.º 8
0
        private static void GameEventHandler(byte[] buffer)
        {
            var nbs = new NetBitStream();

            nbs.BeginRead(buffer);
            EProtocolId id     = (EProtocolId)nbs.ReadProtocolHeader();
            var         objMsg = ProtocolDump.Dump(id, buffer);

            if (objMsg == null)
            {
                loger.Error($"错误协议!{id}");
                return;
            }

            if (id == EProtocolId.S2C_SERVER_CONNECT)
            {
                var rsp = new C2S_Server_Connect()
                {
                    SessionType = (short)BaseServerInfo.SessionType
                };
                Dispatcher.SendByServerID(((S2C_Server_Connect)objMsg).ServerID, rsp);
                return;
            }
            if ((int)id < 100)
            {
                return;
            }
            if (!ClientDispatcher.DictProtocolEvent.TryGetValue(id, out var protocolevent))
            {
                loger.Debug(string.Format("未注册协议->  {0} -> {1} ......", id, (int)id));
                return;
            }
            try
            {
                //处理
                protocolevent.ExecuteProtocolEvent(buffer);
            }
            catch (Exception ex)
            {
                loger.Error(string.Format("处理协议->  {0} -> {1}出错 ex:{2}", id, (int)id, ex.Message));
            }
        }
Ejemplo n.º 9
0
        public static ProtocolMsgBase Dump(EProtocolId id, byte[] buffer)
        {
            switch (id)
            {
            case EProtocolId.ALL_BASE_DEMO:
                return(new All_Base_Demo(buffer));

            case EProtocolId.ALL_BASE_RESULT:
                return(new All_Base_Result(buffer));

            case EProtocolId.ALL_BASE_PING:
                return(new All_Base_Ping(buffer));

            case EProtocolId.ALL_BASE_GAMEVERSION:
                return(new All_Base_GameVersion(buffer));

            case EProtocolId.S2C_SERVER_CONNECT:
                return(new S2C_Server_Connect(buffer));

            case EProtocolId.C2S_SERVER_CONNECT:
                return(new C2S_Server_Connect(buffer));

            case EProtocolId.B2T_GM_START:
                return(new B2T_GM_Start(buffer));

            case EProtocolId.B2T_GM_LOGIN:
                return(new B2T_GM_Login(buffer));

            case EProtocolId.T2B_GM_LOGIN:
                return(new T2B_GM_Login(buffer));

            case EProtocolId.B2G_GM_CMD:
                return(new B2G_GM_Cmd(buffer));

            case EProtocolId.G2B_GM_CMD:
                return(new G2B_GM_Cmd(buffer));

            case EProtocolId.B2T_GM_END:
                return(new B2T_GM_End(buffer));

            case EProtocolId.G2D_GAME_SERVER:
                return(new G2D_Game_Server(buffer));

            case EProtocolId.D2G_GAME_SERVER:
                return(new D2G_Game_Server(buffer));

            case EProtocolId.L2E_GAME_START:
                return(new L2E_Game_Start(buffer));

            case EProtocolId.E2L_GAME_LOGINSERVER:
                return(new E2L_Game_LoginServer(buffer));

            case EProtocolId.L2E_GAME_LOGINSERVER:
                return(new L2E_Game_LoginServer(buffer));

            case EProtocolId.E2L_GAME_REGISTER:
                return(new E2L_Game_Register(buffer));

            case EProtocolId.L2E_GAME_REGISTER:
                return(new L2E_Game_Register(buffer));

            case EProtocolId.E2L_GAME_CREATE:
                return(new E2L_Game_Create(buffer));

            case EProtocolId.L2E_GAME_CREATE:
                return(new L2E_Game_Create(buffer));

            case EProtocolId.L2E_GAME_END:
                return(new L2E_Game_End(buffer));

            case EProtocolId.E2G_GAME_START:
                return(new E2G_Game_Start(buffer));

            case EProtocolId.E2G_GAME_PLAYERXY:
                return(new E2G_Game_PlayerXY(buffer));

            case EProtocolId.G2E_GAME_PLAYERXY:
                return(new G2E_Game_PlayerXY(buffer));

            case EProtocolId.G2E_GAME_PLAYERXYOTHER:
                return(new G2E_Game_PlayerXYOther(buffer));

            case EProtocolId.E2G_GAME_MAPIN:
                return(new E2G_Game_MapIn(buffer));

            case EProtocolId.G2E_GAME_MAPIN:
                return(new G2E_Game_MapIn(buffer));

            case EProtocolId.G2E_GAME_MAPINOTHER:
                return(new G2E_Game_MapInOther(buffer));

            case EProtocolId.E2G_GAME_MAPOUT:
                return(new E2G_Game_MapOut(buffer));

            case EProtocolId.G2E_GAME_MAPOUT:
                return(new G2E_Game_MapOut(buffer));

            case EProtocolId.E2G_GAME_LOGINOUT:
                return(new E2G_Game_LoginOut(buffer));

            case EProtocolId.G2E_GAME_LOGINOUT:
                return(new G2E_Game_LoginOut(buffer));

            case EProtocolId.E2G_GAME_END:
                return(new E2G_Game_End(buffer));

            default:
                return(null);
            }
        }