public void OnReceiveMessage(Mode mode, byte[] buf, int offset, MessageConsumedCallback callback) { var stream = new MemoryStream(buf); var br = new BinaryReader(stream); var invokeId = br.ReadUInt32(); InvokeOperation handle; lock (invokeOperations) { invokeOperations.TryGetValue(invokeId, out handle); invokeOperations.Remove(invokeId); } if (handle != null) { if (br.ReadInt32() > 0) { handle.SetResult(methodSerializer.ReadReturn(handle.MethodId, br)); } else { // todo exception type handle.SetException(new InvokeOperationException(new Exception("br.ReadInt32() <= 0"))); } } }
public void OnReceiveMessage(Mode mode, byte[] buf, int offset, MessageConsumedCallback callback) { var stream = new MemoryStream(buf); var br = new BinaryReader(stream); stream.Position = offset; var srcUuidLen = br.ReadInt32(); byte[] srcUuid = null; if (srcUuidLen > 0) { srcUuid = br.ReadBytes(srcUuidLen); } var method = DeSerializeRpcMethod(br, methodSerializer); serviceMethodDispatcher.Dispatch(rpcImplInstance.SetSourceUuid(srcUuid), method, (v, e) => { var buff = new MemoryStream(16); var bw = new BinaryWriter(buff); bw.Write(method.InvokeId); if (e == null) { bw.Write(1);// return expectedly methodSerializer.WriteReturn(method, bw, v); } else { bw.Write(-1);// return unexpectedly } //todo no need to check null //if (callback == null) //{ // return; //} callback(buff.GetBuffer(), srcUuid, routingRule); //sender.Send(, serviceMetaInfo.GetReturnRoutingKey(new Guid(method.SessionId).ToString()), // serviceMetaInfo.GetReturnExchangeName()); }); }