/// <summary> /// 调用消息对应的消息处理器 /// </summary> /// <param name="messageId"></param> /// <param name="message"></param> private void InvokeRespHandler(int messageId, byte[] message) { var respHandler = respHandlerDic[messageId]; var redicretId = -1; redicretId = RedirectResp.ContainsKey(messageId) ? RedirectResp[messageId] : messageId; if (!respHandlerDic.ContainsKey(redicretId)) { #if DEBUG Debug.LogError($"消息编号{messageId}的消息没有对应的答复处理器存在!"); #endif return; } var handler = respHandlerDic[redicretId]; handler.ReceiveMessage(message); BytesPool.Restore(message); }
/// <summary> /// 接收消息分发方法,在 Unity FixedUpdate 中调用 /// </summary> private void MessageDispatch() { foreach (var channel in netModule.ChannelDic.Values) { if (channel.MessageStorage.ReceiveCount == 0) { continue; } for (int i = 0; i < channel.MessageStorage.ReceiveCount; i++) { var bytes = channel.MessageStorage.GetReceiveMessage(); var messageIdBytes = bytes.GetHeadBytes(); var messageId = BitConverter.ToInt32(messageIdBytes, 0); var messageBodyLength = bytes.Length - 4; var finalBytes = BytesPool.Take(messageBodyLength); Buffer.BlockCopy(bytes, 4, finalBytes, 0, messageBodyLength); BytesPool.Restore(bytes); InvokeRespHandler(messageId, finalBytes); } } }