The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)
https://grpc.io/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
4.2 KiB
103 lines
4.2 KiB
using System; |
|
using System.Threading; |
|
using System.Threading.Tasks; |
|
using System.Collections.Generic; |
|
using System.Reactive.Linq; |
|
using Google.GRPC.Core; |
|
|
|
namespace grpc.testing |
|
{ |
|
/// <summary> |
|
/// TestService (this is handwritten version of code that will normally be generated). |
|
/// </summary> |
|
public class TestServiceGrpc |
|
{ |
|
readonly static Marshaller<Empty> emptyMarshaller = Marshallers.Create((arg) => arg.ToByteArray(), Empty.ParseFrom); |
|
readonly static Marshaller<SimpleRequest> simpleRequestMarshaller = Marshallers.Create((arg) => arg.ToByteArray(), SimpleRequest.ParseFrom); |
|
readonly static Marshaller<SimpleResponse> simpleResponseMarshaller = Marshallers.Create((arg) => arg.ToByteArray(), SimpleResponse.ParseFrom); |
|
|
|
readonly static Method<Empty, Empty> emptyCallMethod = new Method<Empty, Empty>( |
|
MethodType.Unary, |
|
"/grpc.testing.TestService/EmptyCall", |
|
emptyMarshaller, |
|
emptyMarshaller |
|
); |
|
readonly static Method<SimpleRequest, SimpleResponse> unaryCallMethod = new Method<SimpleRequest, SimpleResponse>( |
|
MethodType.Unary, |
|
"/grpc.testing.TestService/UnaryCall", |
|
simpleRequestMarshaller, |
|
simpleResponseMarshaller |
|
); |
|
|
|
public interface ITestServiceClient |
|
{ |
|
Empty EmptyCall(Empty request, CancellationToken token = default(CancellationToken)); |
|
|
|
Task<Empty> EmptyCallAsync(Empty request, CancellationToken token = default(CancellationToken)); |
|
|
|
SimpleResponse UnaryCall(SimpleRequest request, CancellationToken token = default(CancellationToken)); |
|
|
|
Task<SimpleResponse> UnaryCallAsync(SimpleRequest request, CancellationToken token = default(CancellationToken)); |
|
|
|
// TODO: StreamingOutputCall |
|
// TODO: StreamingInputCall |
|
// TODO: FullDuplexCall |
|
// TODO: HalfDuplexCall |
|
} |
|
|
|
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<Empty, Empty>(emptyCallMethod, channel); |
|
return Calls.BlockingUnaryCall(call, request, token); |
|
} |
|
|
|
public Task<Empty> EmptyCallAsync(Empty request, CancellationToken token = default(CancellationToken)) |
|
{ |
|
var call = new Google.GRPC.Core.Call<Empty, Empty>(emptyCallMethod, channel); |
|
return Calls.AsyncUnaryCall(call, request, token); |
|
} |
|
|
|
public SimpleResponse UnaryCall(SimpleRequest request, CancellationToken token = default(CancellationToken)) |
|
{ |
|
var call = new Google.GRPC.Core.Call<SimpleRequest, SimpleResponse>(unaryCallMethod, channel); |
|
return Calls.BlockingUnaryCall(call, request, token); |
|
} |
|
|
|
public Task<SimpleResponse> UnaryCallAsync(SimpleRequest request, CancellationToken token = default(CancellationToken)) |
|
{ |
|
var call = new Google.GRPC.Core.Call<SimpleRequest, SimpleResponse>(unaryCallMethod, channel); |
|
return Calls.AsyncUnaryCall(call, request, token); |
|
} |
|
} |
|
|
|
// server-side interface |
|
public interface ITestService |
|
{ |
|
void EmptyCall(Empty request, IObserver<Empty> responseObserver); |
|
|
|
void UnaryCall(SimpleRequest request, IObserver<SimpleResponse> responseObserver); |
|
} |
|
|
|
public static ServerServiceDefinition BindService(ITestService serviceImpl) |
|
{ |
|
return ServerServiceDefinition.CreateBuilder("/grpc.testing.TestService/") |
|
.AddMethod(emptyCallMethod, serviceImpl.EmptyCall) |
|
.AddMethod(unaryCallMethod, serviceImpl.UnaryCall) |
|
.Build(); |
|
} |
|
|
|
public static ITestServiceClient NewStub(Channel channel) |
|
{ |
|
return new TestServiceClientStub(channel); |
|
} |
|
} |
|
} |