示例#1
0
        static async Task Main(string[] args)
        {
            Channel channel = new Channel(target, ChannelCredentials.Insecure);

            await channel.ConnectAsync().ContinueWith((task) =>
            {
                if (task.Status == TaskStatus.RanToCompletion)
                {
                    Console.WriteLine("The client connected successfully");
                }
            });

            var client = new FindMaxService.FindMaxServiceClient(channel);
            var stream = client.findMaximum();

            var responseReaderTask = Task.Run(async() =>
            {
                while (await stream.ResponseStream.MoveNext())
                {
                    Console.WriteLine(stream.ResponseStream.Current.Max);
                }
            });

            int[] numbers = { 1, 5, 3, 6, 2, 20 };

            foreach (var number in numbers)
            {
                await stream.RequestStream.WriteAsync(new FindMaxRequest()
                {
                    Number = number
                });
            }

            await stream.RequestStream.CompleteAsync();

            await responseReaderTask;

            channel.ShutdownAsync().Wait();
            Console.ReadKey();
        }
示例#2
0
        static async Task Main(string[] args)
        {
            try
            {
                Channel channel = new Channel(target, ChannelCredentials.Insecure);

                await channel.ConnectAsync().ContinueWith((task) =>
                {
                    if (task.Status == TaskStatus.RanToCompletion)
                    {
                        Console.WriteLine("The client connected successfully");
                    }
                });

                var client = new FindMaxService.FindMaxServiceClient(channel);

                var stream = client.FindMax();

                var responseReaderTask = Task.Run(async() =>
                {
                    while (await stream.ResponseStream.MoveNext())
                    {
                        Console.WriteLine($"Max: {stream.ResponseStream.Current.Max}");
                    }
                });

                string key;

                do
                {
                    Console.WriteLine(Environment.NewLine + "Digit a number or type 'ESC' to exit");
                    key = Console.ReadLine();

                    var isNumeric = int.TryParse(key, out int number);

                    if (key.ToLower() != esc && isNumeric)
                    {
                        Console.WriteLine($"Sending: {number}");
                        await stream.RequestStream.WriteAsync(new FindMaxRequest()
                        {
                            Number = number
                        });
                    }
                } while (key.ToLower() != esc);

                await stream.RequestStream.CompleteAsync();

                await responseReaderTask;

                channel.ShutdownAsync().Wait();
                Console.ReadLine();
            }
            catch (RpcException e)
            {
                Console.WriteLine($"StatusCode: {e.Status.StatusCode} | Detail: {e.Status.Detail}");
            }
            catch (Exception e)
            {
                Console.WriteLine("Something went wrong.");
            }
        }