Esempio n. 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);
                    }
                }
            }
Esempio n. 2
0
 public Reader(int bufferSize = defaultBufferSize)
 {
     Buffer = new byte[bufferSize];
     Stream = new MemoryStream(Buffer);
     r      = new BinaryPackerReaderEx(Stream);
 }
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);
                }
                }
            }
Esempio n. 4
0
 public Reader(int bufferSize=defaultBufferSize)
 {
     Buffer = new byte[bufferSize];
     Stream = new MemoryStream(Buffer);
     r = new BinaryPackerReaderEx(Stream);
 }