示例#1
0
            public IEnumerator <uint> Parse(Func <MemoryStream> get, BinaryPackerWriterEx w)
            {
                while (true)
                {
                    yield return(RpcHeader.HeaderLength);

                    var r      = new BinaryPackerReaderEx(get());
                    var header = new RpcHeader(r.ReadUInt32());

                    yield return(header.Length);

                    switch ((MethodId)header.MethodId)
                    {
                    case MethodId.Add:
                        OnAdd(r.ReadInt32());
                        break;

                    case MethodId.Echo:
                        OnEcho(r.ReadFullType());
                        break;

                    case MethodId.Exchange:
                        OnExchange(r.ReadItemArray());
                        break;

                    case MethodId.Get:
                        OnGet(r.ReadItem());
                        break;

                    case MethodId.Change:
                        Item[] consume = r.ReadItemArray();
                        w.Write(OnChange(consume));
                        break;

                    case MethodId.Ping:
                        FullType type = r.ReadFullType();
                        w.Write(OnPing(type));
                        break;

                    // invalid case
                    default:
                        throw new InvalidDataException("Invalid methodId = " + header.MethodId);
                    }
                }
            }
示例#2
0
            public RpcHeader RequestAdd(Int32 a, Int32 b)
            {
                var packetId = Interlocked.Increment(ref globalPacketId);

                return(w.Request(() => {
                    w.Write(a);
                    w.Write(b);
                }, length => new RpcHeader((int)MethodId.Add, (uint)packetId, length)));
            }
示例#3
0
            public RpcHeader RequestChange(Item[] consume)
            {
                var packetId = Interlocked.Increment(ref globalPacketId);
                var header   = w.Request(() => {
                    w.Write(consume);
                }, length => new RpcHeader((int)MethodId.Change, (uint)packetId, length));

                return(header);
            }
示例#4
0
            public IEnumerator<uint> Parse(Func<MemoryStream> get, BinaryPackerWriterEx w)
            {
                while(true)
                {
                yield return RpcHeader.HeaderLength;
                var r = new BinaryPackerReaderEx(get());
                var header = new RpcHeader(r.ReadUInt32());

                yield return header.Length;
                switch((MethodId)header.MethodId)
                {
                    case MethodId.Add:
                        OnAdd(r.ReadInt32());
                        break;

                    case MethodId.Echo:
                        OnEcho(r.ReadFullType());
                        break;

                    case MethodId.Exchange:
                        OnExchange(r.ReadItemArray());
                        break;

                    case MethodId.Get:
                        OnGet(r.ReadItem());
                        break;

                    case MethodId.Change:
                        Item[] consume = r.ReadItemArray();
                        w.Write(OnChange(consume));
                        break;

                    case MethodId.Ping:
                        FullType type = r.ReadFullType();
                        w.Write(OnPing(type));
                        break;

                    // invalid case
                    default:
                        throw new InvalidDataException("Invalid methodId = " + header.MethodId);
                }
                }
            }