|
|
|
@ -67,7 +67,8 @@ namespace Grpc.Core |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// only call this before Start() |
|
|
|
|
public void AddServiceDefinition(ServerServiceDefinition serviceDefinition) { |
|
|
|
|
public void AddServiceDefinition(ServerServiceDefinition serviceDefinition) |
|
|
|
|
{ |
|
|
|
|
foreach (var entry in serviceDefinition.CallHandlers) |
|
|
|
|
{ |
|
|
|
|
callHandlers.Add(entry.Key, entry.Value); |
|
|
|
@ -128,7 +129,8 @@ namespace Grpc.Core |
|
|
|
|
/// cleans up used resources. |
|
|
|
|
/// </summary> |
|
|
|
|
/// <returns>The async.</returns> |
|
|
|
|
public async Task ShutdownAsync() { |
|
|
|
|
public async Task ShutdownAsync() |
|
|
|
|
{ |
|
|
|
|
handle.ShutdownAndNotify(serverShutdownHandler); |
|
|
|
|
await shutdownTcs.Task; |
|
|
|
|
handle.Dispose(); |
|
|
|
@ -145,11 +147,13 @@ namespace Grpc.Core |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void Kill() { |
|
|
|
|
public void Kill() |
|
|
|
|
{ |
|
|
|
|
handle.Dispose(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private async Task StartHandlingRpcs() { |
|
|
|
|
private async Task StartHandlingRpcs() |
|
|
|
|
{ |
|
|
|
|
while (true) |
|
|
|
|
{ |
|
|
|
|
await Task.Factory.StartNew(RunRpc); |
|
|
|
@ -161,22 +165,27 @@ namespace Grpc.Core |
|
|
|
|
AssertCallOk(handle.RequestCall(GetCompletionQueue(), newServerRpcHandler)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void HandleNewServerRpc(GRPCOpError error, IntPtr batchContextPtr) { |
|
|
|
|
try { |
|
|
|
|
private void HandleNewServerRpc(GRPCOpError error, IntPtr batchContextPtr) |
|
|
|
|
{ |
|
|
|
|
try |
|
|
|
|
{ |
|
|
|
|
var ctx = new BatchContextSafeHandleNotOwned(batchContextPtr); |
|
|
|
|
|
|
|
|
|
if (error != GRPCOpError.GRPC_OP_OK) { |
|
|
|
|
if (error != GRPCOpError.GRPC_OP_OK) |
|
|
|
|
{ |
|
|
|
|
// TODO: handle error |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var rpcInfo = new NewRpcInfo(ctx.GetServerRpcNewCall(), ctx.GetServerRpcNewMethod()); |
|
|
|
|
|
|
|
|
|
// after server shutdown, the callback returns with null call |
|
|
|
|
if (!rpcInfo.Call.IsInvalid) { |
|
|
|
|
if (!rpcInfo.Call.IsInvalid) |
|
|
|
|
{ |
|
|
|
|
newRpcQueue.Add(rpcInfo); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} catch(Exception e) { |
|
|
|
|
} |
|
|
|
|
catch (Exception e) |
|
|
|
|
{ |
|
|
|
|
Console.WriteLine("Caught exception in a native handler: " + e); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|