private void AddLoginServerProtocol(EProtocolId protocolId, System.Type type) { int protocolIdInt = (int)protocolId; _loginServerProtocolDic[protocolIdInt] = type; _loginServerProtocolDicReverse[type] = protocolIdInt; }
// 处理消息 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)); } }
/// <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} 失败!"); } }
//绑定注册 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)); } }
/// <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; } }
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); } }
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); }
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)); } }
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); } }