예제 #1
0
        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
        }
예제 #2
0
        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.");
            }
        }