Beispiel #1
0
        private static async Task RunBidirectionalRpc(FooService.FooServiceClient client)
        {
            WriteLine("Starting bidirectional streaming RPC example......\n", ConsoleColor.Blue);

            Console.WriteLine("You will be requested for messages that should be streamed to server.");
            Console.WriteLine("Each message will be streamed to server until request client requests finishes.");
            Console.WriteLine("To finish the request just leave the message empty.");

            var receivedMessages  = new List <string>();
            var bidirectionalCall = client.SendAndGetFoos();

            var readTask = Task.Run(async() =>
            {
                await foreach (var response in bidirectionalCall.ResponseStream.ReadAllAsync())
                {
                    receivedMessages.Add(response.Message);
                }
            });

            while (true)
            {
                WriteRequestInput("Enter a message that should be streamed to gRPC server:");
                var result = Console.ReadLine();

                if (string.IsNullOrEmpty(result))
                {
                    break;
                }

                await bidirectionalCall.RequestStream.WriteAsync(new FooRequest { Message = result });
            }

            await bidirectionalCall.RequestStream.CompleteAsync();

            Console.WriteLine($"\n\tgRPC Server responses:");

            foreach (var receivedMessage in receivedMessages)
            {
                Console.WriteLine($"\t> {receivedMessage}");
            }

            WriteLine("\nFinished bidirectional streaming RPC example...", ConsoleColor.Blue);
            WriteSeparator();
        }