Пример #1
0
        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")));
                }
            }
        }
Пример #2
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());
            });
        }