Esempio n. 1
0
        public override TResponse BlockingUnaryCall <TRequest, TResponse>(Method <TRequest, TResponse> method, string host, CallOptions options, TRequest request)
        {
            var session = m_channel.GetSession();

            using (var rpc = new RpcTunnel <TRequest, TResponse>(session, method))
            {
                rpc.StartRequest(request);
                return(TaskUtil.GetResult(rpc.ReturnValueAsync(), options.CancellationToken));
            }
        }
Esempio n. 2
0
        public override AsyncUnaryCall <TResponse> AsyncUnaryCall <TRequest, TResponse>(Method <TRequest, TResponse> method, string host, CallOptions options, TRequest request)
        {
            var session = m_channel.GetSession();

            var call = Task.Factory.StartNew(() =>
            {
                using (var rpc = new RpcTunnel <TRequest, TResponse>(session, method))
                {
                    rpc.StartRequest(request);
                    return(TaskUtil.GetResult(rpc.ReturnValueAsync(), options.CancellationToken));
                }
            });

            return(new AsyncUnaryCall <TResponse>(call));
        }
Esempio n. 3
0
        public Task HandleCall(IPacketSession session, InternalPacket packet)
        {
            var rpc = new RpcTunnel <TResponse, TRequest>(session, m_MethodInv, packet.MsgId);

            rpc.Start();

            return(Task.Factory.StartNew(() =>
            {
                using (rpc)
                {
                    m_Handler
                    .Invoke(rpc.GetReceiver(), new ServerCallContext())
                    .ContinueWith((taskResult) => rpc.Close(taskResult))
                    .Wait();
                }
            }));
        }
Esempio n. 4
0
        public override AsyncServerStreamingCall <TResponse> AsyncServerStreamingCall <TRequest, TResponse>(Method <TRequest, TResponse> method, string host, CallOptions options, TRequest request)
        {
            var session = m_channel.GetSession();
            var rpc     = new RpcTunnel <TRequest, TResponse>(session, method);
            var ret     = new AsyncServerStreamingCallImpl <TRequest, TResponse>(rpc, session, method);

            try
            {
                // Send request
                rpc.StartRequest(request);

                // Wait response
                return(ret);
            }
            catch (Exception)
            {
                // Failed to request: unregister rpc
                ret.Dispose();
                throw;
            }
        }
Esempio n. 5
0
 /// <summary>
 /// Construtor padrão para o reader de stream de respostas sobre o RPC informado.
 /// </summary>
 /// <param name="rpc">RPC que serve de túnel para o stream.</param>
 public RpcStreamReader(RpcTunnel <TSend, TReceive> rpc)
 {
     m_Rpc   = rpc;
     m_State = ReaderState.Open;
 }
Esempio n. 6
0
 /// <summary>
 /// Construtor padrão para um stream de requisições sobre o RPC informado.
 /// </summary>
 /// <param name="rpc">RPC que serve de túnel para o stream.</param>
 public RpcStreamWriter(RpcTunnel <TSend, TReceive> rpc)
 {
     m_Rpc = rpc;
 }