예제 #1
0
        private static async Task RunServerStreamingRpc(FooService.FooServiceClient client)
        {
            WriteLine("Starting server streaming RPC example...\n", ConsoleColor.Blue);

            Console.WriteLine("You will be requested for an amount of messages that should be streamed to client.");
            Console.WriteLine("gRPC Server will then stream this amount of messages before it will finish the request.");

            WriteRequestInput("Amount of messages:");
            var result = Convert.ToInt32(Console.ReadLine());

            var fooRequest = new FooServerStreamingRequest {
                Message = "Sample request", MessageCount = result
            };
            var serverStreamingCall = client.GetFoos(fooRequest);

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

            await foreach (var response in serverStreamingCall.ResponseStream.ReadAllAsync())
            {
                Console.WriteLine($"\t> {response.Message}");
            }

            WriteLine("\nFinished server streaming RPC example...", ConsoleColor.Blue);
            WriteSeparator();
        }
예제 #2
0
        /// <summary>
        /// Server streaming RPC
        /// </summary>
        public override async Task GetFoos(FooServerStreamingRequest request, IServerStreamWriter <FooResponse> responseStream, ServerCallContext context)
        {
            var count = 0;

            while (count < request.MessageCount && !context.CancellationToken.IsCancellationRequested)
            {
                count++;

                var response = new FooResponse
                {
                    Message = $"Request message: {request.Message} ({count})"
                };

                await responseStream.WriteAsync(response).ConfigureAwait(false);

                await Task.Delay(1000).ConfigureAwait(false);
            }
        }