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