private async Task <IpcResponse> GetResponseAsync(IpcRequest request)
        {
            using (Stream client = await ConnectToServerAsync())
                using (var writer = new IpcWriter(client, _serializer, leaveOpen: true))
                    using (var reader = new IpcReader(client, _serializer, leaveOpen: true))
                    {
                        // send request
                        writer.Write(request);

                        // receive response
                        return(reader.ReadIpcResponse());
                    }
        }
Example #2
0
        private async Task <IpcResponse> GetResponseAsync(IpcRequest request, CancellationToken cancellationToken)
        {
            using (Stream client = await ConnectToServerAsync(cancellationToken))
                using (var writer = new IpcWriter(client, _serializer, leaveOpen: true))
                    using (var reader = new IpcReader(client, _serializer, leaveOpen: true))
                    {
                        // send request
                        await writer.WriteAsync(request, cancellationToken).ConfigureAwait(false);

                        // receive response
                        return(await reader.ReadIpcResponseAsync(cancellationToken).ConfigureAwait(false));
                    }
        }
        public async Task InvokeAsync(Expression <Action <TInterface> > exp)
        {
            IpcRequest  request  = GetRequest(exp, new MyInterceptor());
            IpcResponse response = await GetResponseAsync(request);

            if (response.Succeed)
            {
                return;
            }
            else
            {
                throw new InvalidOperationException(response.Failure);
            }
        }
        public async Task <TResult> InvokeAsync <TResult>(Expression <Func <TInterface, TResult> > exp)
        {
            IpcRequest  request  = GetRequest(exp, new MyInterceptor <TResult>());
            IpcResponse response = await GetResponseAsync(request);

            if (response.Succeed)
            {
                if (_converter.TryConvert(response.Data, typeof(TResult), out object @return))
                {
                    return((TResult)@return);
                }
                else
                {
                    throw new InvalidOperationException($"Unable to convert returned value to '{typeof(TResult).Name}'.");
                }
            }
            else
            {
                throw new InvalidOperationException(response.Failure);
            }
        }
 public byte[] SerializeRequest(IpcRequest request)
 {
     return(Serialize(request));
 }