コード例 #1
0
        static async Task Main(string[] args)
        {
            await Task.Delay(5000);

            var grpcChannel = GrpcChannel.ForAddress("https://localhost:5001");
            var restClient  = new RestClient("https://localhost:5001");
            var grpcClient  = new Sauna.SaunaClient(grpcChannel);
            var grpcRequest = new SaunaRequest {
                TemperatureUnit = "C"
            };
            var restRequest = new RestRequest("sauna", Method.GET);
            await grpcClient.FetchCurrentStateAsync(grpcRequest);

            await restClient.GetAsync <SaunaResponse>(restRequest);

            var  numberOfSamples       = 10;
            long totalGrpcMilliseconds = 0;
            long totalRestMilliseconds = 0;

            for (int i = 0; i < numberOfSamples; i++)
            {
                WriteLine();

                var sw1          = Stopwatch.StartNew();
                var grpcResponse = await grpcClient.FetchCurrentStateAsync(grpcRequest);

                sw1.Stop();
                ForegroundColor        = ConsoleColor.Green;
                totalGrpcMilliseconds += sw1.ElapsedMilliseconds;
                WriteLine($"gRPC: {sw1.ElapsedMilliseconds}ms");

                var sw2          = Stopwatch.StartNew();
                var restResponse = await restClient.GetAsync <SaunaResponse>(restRequest);

                sw2.Stop();
                ForegroundColor        = ConsoleColor.Yellow;
                totalRestMilliseconds += sw2.ElapsedMilliseconds;
                WriteLine($"REST: {sw2.ElapsedMilliseconds}ms");
            }

            WriteLine();
            ForegroundColor = ConsoleColor.Green;
            WriteLine($"Total gRPC:   {totalGrpcMilliseconds}ms");
            WriteLine($"Average gRPC: {totalGrpcMilliseconds / numberOfSamples}ms");
            ForegroundColor = ConsoleColor.Yellow;
            WriteLine($"Total REST:   {totalRestMilliseconds}ms");
            WriteLine($"Average REST: {totalRestMilliseconds / numberOfSamples}ms");
        }
コード例 #2
0
        static async Task Main(string[] args)
        {
            await Task.Delay(1000);

            var channel = GrpcChannel.ForAddress("https://localhost:5001");
            var client  = new Sauna.SaunaClient(channel);
            var request = new SaunaRequest {
                TemperatureUnit = "C"
            };

            // Fetch a single value.
            var response = await client.FetchCurrentStateAsync(request);

            var timeStamp = DateTimeOffset.FromUnixTimeSeconds(response.TimeStamp);

            WriteLine(
                $"[{timeStamp:T}] <{(response.IsInfraRed ? "I" : " ")}> <{(response.IsDrySauna ? "S" : " ")}> {response.Temperature}°C");

            // Fetch a stream of values.
            var cts = new CancellationTokenSource(TimeSpan.FromSeconds(10));

            using var streamingCall = client.FetchStateStream(request, cancellationToken: cts.Token);

            try
            {
                await foreach (var saunaMessage in streamingCall.ResponseStream.ReadAllAsync(cts.Token))
                {
                    timeStamp = DateTimeOffset.FromUnixTimeSeconds(saunaMessage.TimeStamp);
                    WriteLine(
                        $"[{timeStamp:T}] <{(saunaMessage.IsInfraRed ? "I" : " ")}> <{(saunaMessage.IsDrySauna ? "S" : " ")}> {saunaMessage.Temperature}°C");
                }
            }
            catch (RpcException ex) when(ex.StatusCode == StatusCode.Cancelled)
            {
                WriteLine("Stream cancelled.");
            }

            ReadKey();
        }