static async Task Main(string[] args) { var channel = GrpcChannel.ForAddress("https://localhost:5001"); var client = new Connector.ConnectorClient(channel); var call = client.Send(Metadata.Empty); ReadAll(call.ResponseStream); while (true) { var request = new Request(); Console.WriteLine("type: "); request.Type = Console.ReadLine(); Console.WriteLine("data: "); var data = Console.ReadLine()?.Split(',').Select(ByteString.CopyFromUtf8); if (data != null) { request.Data.Add(data); } await call.RequestStream.WriteAsync(request); } // ReSharper disable once FunctionNeverReturns }
public async Task RunDuplexAsync() { // duplex var requestHeaders = new Metadata { { "x-host-port", "10-0-0-10" }, }; var duplexClient = new Connector.ConnectorClient(_channel); _duplexStreaming = duplexClient.Subscribe(requestHeaders); _readTask = Task.Run(async() => { await foreach (var response in _duplexStreaming.ResponseStream.ReadAllAsync()) { Console.WriteLine(response.Message); } }); var i = 0; try { while (i++ < 100) { await _duplexStreaming.RequestStream.WriteAsync(new ActionMessage { Name = $"{_prefix} {i}", }); await Task.Delay(TimeSpan.FromMilliseconds(1000)); } } catch (RpcException e) when(e.StatusCode == StatusCode.OK) { return; } catch (RpcException e) when(e.StatusCode == StatusCode.Cancelled) { return; } catch (OperationCanceledException) { Console.WriteLine("Finished."); } }