public void Send(byte nFlag, IHotfixMessage rMessage) { NetworkOpcodeTypes rOpcodeTypes = this.mSession.Parent.OpcodeTypes; ushort nOpcode = rOpcodeTypes.GetOpcode(rMessage.GetType()); byte[] rBytes = this.mMessagePacker.SerializeToByteArray(rMessage); Send(nFlag, nOpcode, rBytes); }
public void Run(NetworkSession rSession, Packet rPacket) { if (this.mSession != rSession) { Debug.LogError("Network Session is not the same one."); return; } ushort nOpcode = rPacket.Opcode; byte nFlag = rPacket.Flag; NetworkOpcodeTypes rOpcodeTypeComponent = this.mSession.Parent.OpcodeTypes; Type rResponseType = rOpcodeTypeComponent.GetType(nOpcode); object rMessage = this.mMessagePacker.DeserializeFrom(rResponseType, rPacket.Bytes, Packet.Index, rPacket.Length - Packet.Index); Debug.LogError($"recv: {HotfixJsonParser.ToJsonNode(rMessage)}"); // 非RPC消息走这里 if ((nFlag & 0x01) == 0) { EventManager.Instance.Distribute(nOpcode, rMessage); return; } // Rpc回调消息 IHotfixResponse rResponse = rMessage as IHotfixResponse; if (rResponse == null) { throw new Exception($"flag is response, but message is not! {nOpcode}"); } Action <IHotfixResponse> rAction; if (!this.mRequestCallback.TryGetValue(rResponse.RpcId, out rAction)) { return; } this.mRequestCallback.Remove(rResponse.RpcId); rAction(rResponse); }