Skip to content

Commit 89b0663

Browse files
authored
Merge pull request #16 from topsterde/CallInvoker
Added CallInvoker support
2 parents 7501d07 + 4e0b154 commit 89b0663

File tree

2 files changed

+45
-8
lines changed

2 files changed

+45
-8
lines changed

src/DynamicGrpc/DynamicFileDescriptorSet.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,10 @@ private void ProcessMessageType(MessageDescriptor messageDescriptor, string pare
8383
return (inputMessageProto.GetMarshaller(context), outputMessageProto.GetMarshaller(context));
8484
}
8585

86-
public static async Task<DynamicFileDescriptorSet> FromServerReflection(ChannelBase channel, int? timeoutInMillis, CancellationToken cancellationToken)
86+
public static async Task<DynamicFileDescriptorSet> FromServerReflection(CallInvoker callInvoker, int? timeoutInMillis, CancellationToken cancellationToken)
8787
{
8888
// Step 1 - Fetch all services we can interact with
89-
var client = new ServerReflection.ServerReflectionClient(channel);
89+
var client = new ServerReflection.ServerReflectionClient(callInvoker);
9090
var response = await SingleRequestAsync(client, new ServerReflectionRequest
9191
{
9292
ListServices = ""

src/DynamicGrpc/DynamicGrpcClient.cs

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public sealed class DynamicGrpcClient : ClientBase
1212
private readonly DynamicFileDescriptorSet _dynamicDescriptorSet;
1313
private readonly DynamicGrpcClientOptions _options;
1414

15-
private DynamicGrpcClient(ChannelBase channel, DynamicFileDescriptorSet dynamicDescriptorSet, DynamicGrpcClientOptions options) : base(channel)
15+
private DynamicGrpcClient(CallInvoker callInvoker, DynamicFileDescriptorSet dynamicDescriptorSet, DynamicGrpcClientOptions options) : base(callInvoker)
1616
{
1717
_dynamicDescriptorSet = dynamicDescriptorSet;
1818
_options = options;
@@ -43,9 +43,21 @@ public bool TryFindMethod(string serviceName, string methodName, [NotNullWhen(tr
4343
/// <param name="options">Options for this client.</param>
4444
/// <returns>A dynamic client gRPC instance.</returns>
4545
public static DynamicGrpcClient FromDescriptors(ChannelBase channel, FileDescriptor[] descriptors, DynamicGrpcClientOptions? options = null)
46+
{
47+
return FromDescriptors(channel.CreateCallInvoker(), descriptors, options);
48+
}
49+
50+
/// <summary>
51+
/// Creates a client by using the specified <see cref="FileDescriptor"/>. The descriptors must appear in reverse dependency order (if A depends on B, B should comes first).
52+
/// </summary>
53+
/// <param name="callInvoker">The gRPC CallInvoker to fetch reflection data from.</param>
54+
/// <param name="descriptors">The file descriptors./></param>
55+
/// <param name="options">Options for this client.</param>
56+
/// <returns>A dynamic client gRPC instance.</returns>
57+
public static DynamicGrpcClient FromDescriptors(CallInvoker callInvoker, FileDescriptor[] descriptors, DynamicGrpcClientOptions? options = null)
4658
{
4759
options ??= new DynamicGrpcClientOptions();
48-
return new DynamicGrpcClient(channel, DynamicFileDescriptorSet.FromFileDescriptors(descriptors), options);
60+
return new DynamicGrpcClient(callInvoker, DynamicFileDescriptorSet.FromFileDescriptors(descriptors), options);
4961
}
5062

5163
/// <summary>
@@ -56,9 +68,21 @@ public static DynamicGrpcClient FromDescriptors(ChannelBase channel, FileDescrip
5668
/// <param name="options">Options for this client.</param>
5769
/// <returns>A dynamic client gRPC instance.</returns>
5870
public static DynamicGrpcClient FromDescriptorProtos(ChannelBase channel, FileDescriptorProto[] descriptorProtos, DynamicGrpcClientOptions? options = null)
71+
{
72+
return FromDescriptorProtos(channel.CreateCallInvoker(), descriptorProtos, options);
73+
}
74+
75+
/// <summary>
76+
/// Creates a client by using the specified <see cref="FileDescriptorProto"/>. The descriptors must appear in reverse dependency order (if A depends on B, B should comes first).
77+
/// </summary>
78+
/// <param name="callInvoker">The gRPC CallInvoker to fetch reflection data from.</param>
79+
/// <param name="descriptorProtos">The file proto descriptors./></param>
80+
/// <param name="options">Options for this client.</param>
81+
/// <returns>A dynamic client gRPC instance.</returns>
82+
public static DynamicGrpcClient FromDescriptorProtos(CallInvoker callInvoker, FileDescriptorProto[] descriptorProtos, DynamicGrpcClientOptions? options = null)
5983
{
6084
options ??= new DynamicGrpcClientOptions();
61-
return new DynamicGrpcClient(channel, DynamicFileDescriptorSet.FromFileDescriptorProtos(descriptorProtos), options);
85+
return new DynamicGrpcClient(callInvoker, DynamicFileDescriptorSet.FromFileDescriptorProtos(descriptorProtos), options);
6286
}
6387

6488
/// <summary>
@@ -69,11 +93,24 @@ public static DynamicGrpcClient FromDescriptorProtos(ChannelBase channel, FileDe
6993
/// <param name="timeoutInMillis">Timeout in milliseconds. Default is 10000ms (10 seconds).</param>
7094
/// <param name="cancellationToken">Optional cancellation token.</param>
7195
/// <returns>A dynamic client gRPC instance.</returns>
72-
public static async Task<DynamicGrpcClient> FromServerReflection(ChannelBase channel, DynamicGrpcClientOptions? options = null, int timeoutInMillis = 10000, CancellationToken cancellationToken = default)
96+
public static Task<DynamicGrpcClient> FromServerReflection(ChannelBase channel, DynamicGrpcClientOptions? options = null, int timeoutInMillis = 10000, CancellationToken cancellationToken = default)
97+
{
98+
return FromServerReflection(channel.CreateCallInvoker(), options, timeoutInMillis, cancellationToken);
99+
}
100+
101+
/// <summary>
102+
/// Creates a client by fetching reflection data from the server. Might trigger an exception if the server doesn't support exception.
103+
/// </summary>
104+
/// <param name="callInvoker">The gRPC CallInvoker to fetch reflection data from.</param>
105+
/// <param name="options">Options for this client.</param>
106+
/// <param name="timeoutInMillis">Timeout in milliseconds. Default is 10000ms (10 seconds).</param>
107+
/// <param name="cancellationToken">Optional cancellation token.</param>
108+
/// <returns>A dynamic client gRPC instance.</returns>
109+
public static async Task<DynamicGrpcClient> FromServerReflection(CallInvoker callInvoker, DynamicGrpcClientOptions? options = null, int timeoutInMillis = 10000, CancellationToken cancellationToken = default)
73110
{
74111
options ??= new DynamicGrpcClientOptions();
75-
var dynamicDescriptorSet = await DynamicFileDescriptorSet.FromServerReflection(channel, timeoutInMillis, cancellationToken);
76-
return new DynamicGrpcClient(channel, dynamicDescriptorSet, options);
112+
var dynamicDescriptorSet = await DynamicFileDescriptorSet.FromServerReflection(callInvoker, timeoutInMillis, cancellationToken);
113+
return new DynamicGrpcClient(callInvoker, dynamicDescriptorSet, options);
77114
}
78115

79116
/// <summary>Invokes a simple remote call in a blocking fashion.</summary>

0 commit comments

Comments
 (0)