using System; using System.Threading; using System.Threading.Tasks; using System.Collections.Generic; using System.Reactive.Linq; using Google.GRPC.Core; namespace grpc.testing { /// /// TestService (this is handwritten version of code that will normally be generated). /// public class TestServiceGrpc { readonly static Marshaller emptyMarshaller = Marshallers.Create((arg) => arg.ToByteArray(), Empty.ParseFrom); readonly static Marshaller simpleRequestMarshaller = Marshallers.Create((arg) => arg.ToByteArray(), SimpleRequest.ParseFrom); readonly static Marshaller simpleResponseMarshaller = Marshallers.Create((arg) => arg.ToByteArray(), SimpleResponse.ParseFrom); readonly static Marshaller streamingOutputCallRequestMarshaller = Marshallers.Create((arg) => arg.ToByteArray(), StreamingOutputCallRequest.ParseFrom); readonly static Marshaller streamingOutputCallResponseMarshaller = Marshallers.Create((arg) => arg.ToByteArray(), StreamingOutputCallResponse.ParseFrom); readonly static Marshaller streamingInputCallRequestMarshaller = Marshallers.Create((arg) => arg.ToByteArray(), StreamingInputCallRequest.ParseFrom); readonly static Marshaller streamingInputCallResponseMarshaller = Marshallers.Create((arg) => arg.ToByteArray(), StreamingInputCallResponse.ParseFrom); readonly static Method emptyCallMethod = new Method( MethodType.Unary, "/grpc.testing.TestService/EmptyCall", emptyMarshaller, emptyMarshaller ); readonly static Method unaryCallMethod = new Method( MethodType.Unary, "/grpc.testing.TestService/UnaryCall", simpleRequestMarshaller, simpleResponseMarshaller ); readonly static Method streamingOutputCallMethod = new Method( MethodType.ServerStreaming, "/grpc.testing.TestService/StreamingOutputCall", streamingOutputCallRequestMarshaller, streamingOutputCallResponseMarshaller ); readonly static Method streamingInputCallMethod = new Method( MethodType.ClientStreaming, "/grpc.testing.TestService/StreamingInputCall", streamingInputCallRequestMarshaller, streamingInputCallResponseMarshaller ); readonly static Method fullDuplexCallMethod = new Method( MethodType.DuplexStreaming, "/grpc.testing.TestService/FullDuplexCall", streamingOutputCallRequestMarshaller, streamingOutputCallResponseMarshaller ); readonly static Method halfDuplexCallMethod = new Method( MethodType.DuplexStreaming, "/grpc.testing.TestService/HalfDuplexCall", streamingOutputCallRequestMarshaller, streamingOutputCallResponseMarshaller ); public interface ITestServiceClient { Empty EmptyCall(Empty request, CancellationToken token = default(CancellationToken)); Task EmptyCallAsync(Empty request, CancellationToken token = default(CancellationToken)); SimpleResponse UnaryCall(SimpleRequest request, CancellationToken token = default(CancellationToken)); Task UnaryCallAsync(SimpleRequest request, CancellationToken token = default(CancellationToken)); Task StreamingOutputCall(StreamingOutputCallRequest request, IObserver responseObserver, CancellationToken token = default(CancellationToken)); ClientStreamingAsyncResult StreamingInputCall(CancellationToken token = default(CancellationToken)); IObserver FullDuplexCall(IObserver responseObserver, CancellationToken token = default(CancellationToken)); IObserver HalfDuplexCall(IObserver responseObserver, CancellationToken token = default(CancellationToken)); } public class TestServiceClientStub : ITestServiceClient { readonly Channel channel; public TestServiceClientStub(Channel channel) { this.channel = channel; } public Empty EmptyCall(Empty request, CancellationToken token = default(CancellationToken)) { var call = new Google.GRPC.Core.Call(emptyCallMethod, channel); return Calls.BlockingUnaryCall(call, request, token); } public Task EmptyCallAsync(Empty request, CancellationToken token = default(CancellationToken)) { var call = new Google.GRPC.Core.Call(emptyCallMethod, channel); return Calls.AsyncUnaryCall(call, request, token); } public SimpleResponse UnaryCall(SimpleRequest request, CancellationToken token = default(CancellationToken)) { var call = new Google.GRPC.Core.Call(unaryCallMethod, channel); return Calls.BlockingUnaryCall(call, request, token); } public Task UnaryCallAsync(SimpleRequest request, CancellationToken token = default(CancellationToken)) { var call = new Google.GRPC.Core.Call(unaryCallMethod, channel); return Calls.AsyncUnaryCall(call, request, token); } public Task StreamingOutputCall(StreamingOutputCallRequest request, IObserver responseObserver, CancellationToken token = default(CancellationToken)) { var call = new Google.GRPC.Core.Call(streamingOutputCallMethod, channel); return Calls.AsyncServerStreamingCall(call, request, responseObserver, token); } public ClientStreamingAsyncResult StreamingInputCall(CancellationToken token = default(CancellationToken)) { var call = new Google.GRPC.Core.Call(streamingInputCallMethod, channel); return Calls.AsyncClientStreamingCall(call, token); } public IObserver FullDuplexCall(IObserver responseObserver, CancellationToken token = default(CancellationToken)) { var call = new Google.GRPC.Core.Call(fullDuplexCallMethod, channel); return Calls.DuplexStreamingCall(call, responseObserver, token); } public IObserver HalfDuplexCall(IObserver responseObserver, CancellationToken token = default(CancellationToken)) { var call = new Google.GRPC.Core.Call(halfDuplexCallMethod, channel); return Calls.DuplexStreamingCall(call, responseObserver, token); } } // server-side interface public interface ITestService { void EmptyCall(Empty request, IObserver responseObserver); void UnaryCall(SimpleRequest request, IObserver responseObserver); void StreamingOutputCall(StreamingOutputCallRequest request, IObserver responseObserver); IObserver StreamingInputCall(IObserver responseObserver); IObserver FullDuplexCall(IObserver responseObserver); IObserver HalfDuplexCall(IObserver responseObserver); } public static ServerServiceDefinition BindService(ITestService serviceImpl) { return ServerServiceDefinition.CreateBuilder("/grpc.testing.TestService/") .AddMethod(emptyCallMethod, serviceImpl.EmptyCall) .AddMethod(unaryCallMethod, serviceImpl.UnaryCall) .AddMethod(streamingOutputCallMethod, serviceImpl.StreamingOutputCall) .AddMethod(streamingInputCallMethod, serviceImpl.StreamingInputCall) .AddMethod(fullDuplexCallMethod, serviceImpl.FullDuplexCall) .AddMethod(halfDuplexCallMethod, serviceImpl.HalfDuplexCall) .Build(); } public static ITestServiceClient NewStub(Channel channel) { return new TestServiceClientStub(channel); } } }