Esempio n. 1
0
            public Action <Writer> Dispatch(RpcHeader header)
            {
#if DEBUG
                assert(header.Length, "RpcBody " + (MethodId)header.MethodId);
#endif

                switch ((MethodId)header.MethodId)
                {
                case MethodId.Add:
                    return(_ => OnAdd(r.ReadInt32()));


                case MethodId.Echo:
                    return(_ => OnEcho(r.ReadFullType()));


                case MethodId.Exchange:
                    return(_ => OnExchange(r.ReadItemArray()));


                case MethodId.Get:
                    return(_ => OnGet(r.ReadItem()));



                case MethodId.Change:

                    Item[] consume = r.ReadItemArray();


                    return(w => w.ResponseChange(OnChange(consume), header));



                case MethodId.Ping:

                    FullType type = r.ReadFullType();


                    return(w => w.ResponsePing(OnPing(type), header));



                default:
                    return(null);
                }
            }
Esempio n. 2
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);
                    }
                }
            }
Esempio n. 3
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);
                }
                }
            }