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 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))); }
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); }
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); } } }