Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }