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