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