blob: e6e380d70f542bbe293d6c6c62318a2a94fa6ab7 [file] [log] [blame]
Jan Tattermuschd0c1bfa2015-10-22 19:14:57 -07001#region Copyright notice and license
2
Jan Tattermusch7897ae92017-06-07 22:57:36 +02003// Copyright 2015 gRPC authors.
Jan Tattermuschd0c1bfa2015-10-22 19:14:57 -07004//
Jan Tattermusch7897ae92017-06-07 22:57:36 +02005// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
Jan Tattermuschd0c1bfa2015-10-22 19:14:57 -07008//
Jan Tattermusch7897ae92017-06-07 22:57:36 +02009// http://www.apache.org/licenses/LICENSE-2.0
Jan Tattermuschd0c1bfa2015-10-22 19:14:57 -070010//
Jan Tattermusch7897ae92017-06-07 22:57:36 +020011// Unless required by applicable law or agreed to in writing, software
12// distributed under the License is distributed on an "AS IS" BASIS,
13// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14// See the License for the specific language governing permissions and
15// limitations under the License.
Jan Tattermuschd0c1bfa2015-10-22 19:14:57 -070016
17#endregion
18
19using System;
20using System.Collections.Generic;
21using System.Threading;
22using System.Threading.Tasks;
23using Google.Protobuf;
24using Grpc.Core;
25using Grpc.Core.Utils;
26using Grpc.IntegrationTesting;
27
28namespace Grpc.Testing
29{
30 /// <summary>
31 /// Implementation of WorkerService server
32 /// </summary>
Jan Tattermuschd39426d2016-03-14 16:07:52 -070033 public class WorkerServiceImpl : WorkerService.WorkerServiceBase
Jan Tattermuschd0c1bfa2015-10-22 19:14:57 -070034 {
Jan Tattermusch1cbb5672016-02-18 14:27:28 -080035 readonly Action stopRequestHandler;
36
37 public WorkerServiceImpl(Action stopRequestHandler)
38 {
Jan Tattermuscha4933532016-02-23 10:45:58 -080039 this.stopRequestHandler = GrpcPreconditions.CheckNotNull(stopRequestHandler);
Jan Tattermusch1cbb5672016-02-18 14:27:28 -080040 }
41
Jan Tattermuschd39426d2016-03-14 16:07:52 -070042 public override async Task RunServer(IAsyncStreamReader<ServerArgs> requestStream, IServerStreamWriter<ServerStatus> responseStream, ServerCallContext context)
Jan Tattermuschd0c1bfa2015-10-22 19:14:57 -070043 {
Jan Tattermusch7a3ee6a2016-02-18 10:36:02 -080044 GrpcPreconditions.CheckState(await requestStream.MoveNext());
Jan Tattermuschd0c1bfa2015-10-22 19:14:57 -070045 var serverConfig = requestStream.Current.Setup;
46 var runner = ServerRunners.CreateStarted(serverConfig);
47
48 await responseStream.WriteAsync(new ServerStatus
49 {
50 Stats = runner.GetStats(false),
51 Port = runner.BoundPort,
Jan Tattermuschd0f5f722016-05-18 21:44:15 -070052 Cores = Environment.ProcessorCount,
Jan Tattermuschd0c1bfa2015-10-22 19:14:57 -070053 });
54
55 while (await requestStream.MoveNext())
56 {
57 var reset = requestStream.Current.Mark.Reset;
58 await responseStream.WriteAsync(new ServerStatus
59 {
60 Stats = runner.GetStats(reset)
61 });
62 }
63 await runner.StopAsync();
64 }
65
Jan Tattermuschd39426d2016-03-14 16:07:52 -070066 public override async Task RunClient(IAsyncStreamReader<ClientArgs> requestStream, IServerStreamWriter<ClientStatus> responseStream, ServerCallContext context)
Jan Tattermuschd0c1bfa2015-10-22 19:14:57 -070067 {
Jan Tattermusch7a3ee6a2016-02-18 10:36:02 -080068 GrpcPreconditions.CheckState(await requestStream.MoveNext());
Jan Tattermuschd0c1bfa2015-10-22 19:14:57 -070069 var clientConfig = requestStream.Current.Setup;
70 var runner = ClientRunners.CreateStarted(clientConfig);
71
72 await responseStream.WriteAsync(new ClientStatus
73 {
74 Stats = runner.GetStats(false)
75 });
76
77 while (await requestStream.MoveNext())
78 {
79 var reset = requestStream.Current.Mark.Reset;
80 await responseStream.WriteAsync(new ClientStatus
81 {
82 Stats = runner.GetStats(reset)
83 });
84 }
85 await runner.StopAsync();
86 }
Jan Tattermusch1cbb5672016-02-18 14:27:28 -080087
Jan Tattermuschd39426d2016-03-14 16:07:52 -070088 public override Task<CoreResponse> CoreCount(CoreRequest request, ServerCallContext context)
Jan Tattermusch1cbb5672016-02-18 14:27:28 -080089 {
90 return Task.FromResult(new CoreResponse { Cores = Environment.ProcessorCount });
91 }
92
Jan Tattermuschd39426d2016-03-14 16:07:52 -070093 public override Task<Void> QuitWorker(Void request, ServerCallContext context)
Jan Tattermusch1cbb5672016-02-18 14:27:28 -080094 {
95 stopRequestHandler();
96 return Task.FromResult(new Void());
97 }
Jan Tattermuschd0c1bfa2015-10-22 19:14:57 -070098 }
99}