/// <summary> /// 处理由gate转发的client消息 /// </summary> /// <param name="packet"></param> private void HandleProxyClientMsg(PacketBase packet) { ProxyC2SMsg proxy_msg = packet as ProxyC2SMsg; //转发的消息id ushort header = proxy_msg.data.ReadUShort(); if (header < ProtocolID.MSG_BASE_C2SS || header >= ProtocolID.MSG_BASE_C2SS + ProtocolID.MSG_APPLAYER_PER_INTERVAL) { Log.Debug("收到错误的消息ID:" + header); return; } PacketBase msg = PacketPools.Get(header); msg.Read(proxy_msg.data); //处理 ushort msg_id = (ushort)(header - ProtocolID.MSG_BASE_C2SS); MsgProcFunction fun = m_client_msg_proc[msg_id]; if (fun == null) { Log.Debug("未注册消息处理函数ID:" + header); } else { fun(msg); } PacketPools.Recover(msg); }
/// <summary> /// 处理消息 /// </summary> /// <param name="conn_idx"></param> /// <param name="packet"></param> /// <returns></returns> public bool HandleMsg(long conn_idx, PacketBase packet) { ushort header = packet.header; if (header < m_msg_begin_idx || header >= m_msg_begin_idx + ProtocolID.MSG_APPLAYER_PER_INTERVAL) { return(false); } ushort msg_id = (ushort)(header - m_msg_begin_idx); MsgProcFunction fun = m_msg_proc[msg_id]; if (fun == null) { Log.Warning("未处理消息:" + (m_msg_begin_idx + msg_id)); return(false); } try { fun(packet); } catch (Exception e) { Log.Exception(e); } return(true); }
private void RegisterMsgProc(ushort id, MsgProcFunction fun) { if (m_msg_proc.ContainsKey(id)) { Log.Error("相同键已经存在:" + id); return; } m_msg_proc.Add(id, fun); }
private void RegisterMsgProc(ushort id, MsgProcFunction fun) { ushort msg_id = (ushort)(id - m_msg_begin_idx); m_msg_proc[msg_id] = fun; }
private void RegisterClientMsgProc(ushort id, MsgProcFunction fun) { ushort msg_id = (ushort)(id - ProtocolID.MSG_BASE_C2SS); m_client_msg_proc[msg_id] = fun; }