code style fixes based on StyleCop warnings

pull/1017/head
Jan Tattermusch 10 years ago
parent 053d894e2c
commit 075dde42fe
  1. 8
      src/csharp/Grpc.Core.Tests/ClientServerTest.cs
  2. 2
      src/csharp/Grpc.Core.Tests/GrpcEnvironmentTest.cs
  3. 35
      src/csharp/Grpc.Core.Tests/PInvokeTest.cs
  4. 10
      src/csharp/Grpc.Core.Tests/Properties/AssemblyInfo.cs
  5. 1
      src/csharp/Grpc.Core.Tests/ServerTest.cs
  6. 1
      src/csharp/Grpc.Core.Tests/TimespecTest.cs
  7. 4
      src/csharp/Grpc.Core/Call.cs
  8. 4
      src/csharp/Grpc.Core/Calls.cs
  9. 2
      src/csharp/Grpc.Core/Channel.cs
  10. 4
      src/csharp/Grpc.Core/ChannelArgs.cs
  11. 1
      src/csharp/Grpc.Core/ClientStreamingAsyncResult.cs
  12. 1
      src/csharp/Grpc.Core/Credentials.cs
  13. 8
      src/csharp/Grpc.Core/GrpcEnvironment.cs
  14. 14
      src/csharp/Grpc.Core/Internal/AsyncCall.cs
  15. 18
      src/csharp/Grpc.Core/Internal/AsyncCallBase.cs
  16. 1
      src/csharp/Grpc.Core/Internal/AsyncCompletion.cs
  17. 8
      src/csharp/Grpc.Core/Internal/BatchContextSafeHandleNotOwned.cs
  18. 7
      src/csharp/Grpc.Core/Internal/CallSafeHandle.cs
  19. 1
      src/csharp/Grpc.Core/Internal/ChannelArgsSafeHandle.cs
  20. 1
      src/csharp/Grpc.Core/Internal/CompletionQueueSafeHandle.cs
  21. 1
      src/csharp/Grpc.Core/Internal/Enums.cs
  22. 4
      src/csharp/Grpc.Core/Internal/GrpcLog.cs
  23. 17
      src/csharp/Grpc.Core/Internal/GrpcThreadPool.cs
  24. 1
      src/csharp/Grpc.Core/Internal/SafeHandleZeroIsInvalid.cs
  25. 4
      src/csharp/Grpc.Core/Internal/ServerSafeHandle.cs
  26. 1
      src/csharp/Grpc.Core/Internal/ServerStreamingOutputObserver.cs
  27. 11
      src/csharp/Grpc.Core/Internal/Timespec.cs
  28. 12
      src/csharp/Grpc.Core/Marshaller.cs
  29. 1
      src/csharp/Grpc.Core/Method.cs
  30. 1
      src/csharp/Grpc.Core/OperationFailedException.cs
  31. 28
      src/csharp/Grpc.Core/Properties/AssemblyInfo.cs
  32. 1
      src/csharp/Grpc.Core/RpcException.cs
  33. 35
      src/csharp/Grpc.Core/Server.cs
  34. 7
      src/csharp/Grpc.Core/ServerCallHandler.cs
  35. 10
      src/csharp/Grpc.Core/ServerCalls.cs
  36. 1
      src/csharp/Grpc.Core/ServerCredentials.cs
  37. 6
      src/csharp/Grpc.Core/ServerServiceDefinition.cs
  38. 1
      src/csharp/Grpc.Core/StatusCode.cs
  39. 7
      src/csharp/Grpc.Core/Utils/BenchmarkUtil.cs
  40. 4
      src/csharp/Grpc.Core/Utils/ExceptionHelper.cs
  41. 9
      src/csharp/Grpc.Core/Utils/Preconditions.cs
  42. 4
      src/csharp/Grpc.Core/Utils/RecordingObserver.cs
  43. 5
      src/csharp/Grpc.Core/Utils/RecordingQueue.cs
  44. 28
      src/csharp/Grpc.Examples.MathClient/Properties/AssemblyInfo.cs
  45. 13
      src/csharp/Grpc.Examples.Tests/MathClientServerTests.cs
  46. 10
      src/csharp/Grpc.Examples.Tests/Properties/AssemblyInfo.cs
  47. 21
      src/csharp/Grpc.Examples/MathExamples.cs
  48. 13
      src/csharp/Grpc.Examples/MathServiceImpl.cs
  49. 28
      src/csharp/Grpc.Examples/Properties/AssemblyInfo.cs
  50. 10
      src/csharp/Grpc.IntegrationTesting.Client/Properties/AssemblyInfo.cs
  51. 10
      src/csharp/Grpc.IntegrationTesting.Server/Properties/AssemblyInfo.cs
  52. 16
      src/csharp/Grpc.IntegrationTesting/InteropClient.cs
  53. 4
      src/csharp/Grpc.IntegrationTesting/InteropClientServerTest.cs
  54. 4
      src/csharp/Grpc.IntegrationTesting/InteropServer.cs
  55. 10
      src/csharp/Grpc.IntegrationTesting/Properties/AssemblyInfo.cs
  56. 4
      src/csharp/Grpc.IntegrationTesting/TestCredentials.cs
  57. 33
      src/csharp/Grpc.IntegrationTesting/TestServiceImpl.cs

@ -122,10 +122,13 @@ namespace Grpc.Core.Tests
{
var call = new Call<string, string>(unaryEchoStringMethod, channel);
try {
try
{
Calls.BlockingUnaryCall(call, "ABC", default(CancellationToken));
Assert.Fail();
} catch(RpcException e) {
}
catch (RpcException e)
{
Assert.AreEqual(StatusCode.Unimplemented, e.Status.StatusCode);
}
}
@ -140,4 +143,3 @@ namespace Grpc.Core.Tests
}
}
}

@ -68,7 +68,7 @@ namespace Grpc.Core.Tests
var tp2 = GrpcEnvironment.ThreadPool;
GrpcEnvironment.Shutdown();
Assert.IsFalse(Object.ReferenceEquals(tp1, tp2));
Assert.IsFalse(object.ReferenceEquals(tp1, tp2));
}
}
}

@ -33,13 +33,13 @@
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
using Grpc.Core;
using Grpc.Core.Internal;
using Grpc.Core.Utils;
using NUnit.Framework;
using System.Runtime.InteropServices;
namespace Grpc.Core.Tests
{
@ -73,14 +73,13 @@ namespace Grpc.Core.Tests
{
BenchmarkUtil.RunBenchmark(
100000, 1000000,
() => {
() =>
{
CompletionQueueSafeHandle cq = CompletionQueueSafeHandle.Create();
cq.Dispose();
}
);
});
}
/// <summary>
/// Approximate results:
/// (~80ns Mono Linux)
@ -94,10 +93,10 @@ namespace Grpc.Core.Tests
counter = 0;
BenchmarkUtil.RunBenchmark(
1000000, 10000000,
() => {
() =>
{
grpcsharp_test_callback(handler);
}
);
});
Assert.AreNotEqual(0, counter);
}
@ -113,10 +112,10 @@ namespace Grpc.Core.Tests
counter = 0;
BenchmarkUtil.RunBenchmark(
10000, 10000,
() => {
grpcsharp_test_callback(new CompletionCallbackDelegate(Handler));
}
);
() =>
{
grpcsharp_test_callback(new CompletionCallbackDelegate(Handler));
});
Assert.AreNotEqual(0, counter);
}
@ -129,15 +128,15 @@ namespace Grpc.Core.Tests
{
BenchmarkUtil.RunBenchmark(
1000000, 100000000,
() => {
() =>
{
grpcsharp_test_nop(IntPtr.Zero);
}
);
});
}
private void Handler(GRPCOpError op, IntPtr ptr) {
counter ++;
private void Handler(GRPCOpError op, IntPtr ptr)
{
counter++;
}
}
}

@ -1,8 +1,6 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle("Grpc.Core.Tests")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
@ -11,12 +9,4 @@ using System.Runtime.CompilerServices;
[assembly: AssemblyCopyright("Google Inc. All rights reserved.")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("0.1.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
//[assembly: AssemblyDelaySign(false)]
//[assembly: AssemblyKeyFile("")]

@ -53,6 +53,5 @@ namespace Grpc.Core.Tests
GrpcEnvironment.Shutdown();
}
}
}

@ -86,4 +86,3 @@ namespace Grpc.Core.Internal.Tests
}
}
}

@ -47,7 +47,8 @@ namespace Grpc.Core
Func<TRequest, byte[]> requestSerializer,
Func<byte[], TResponse> responseDeserializer,
TimeSpan timeout,
Channel channel) {
Channel channel)
{
this.methodName = methodName;
this.requestSerializer = requestSerializer;
this.responseDeserializer = responseDeserializer;
@ -95,4 +96,3 @@ namespace Grpc.Core
}
}
}

@ -89,9 +89,9 @@ namespace Grpc.Core
return new ClientStreamingInputObserver<TRequest, TResponse>(asyncCall);
}
private static CompletionQueueSafeHandle GetCompletionQueue() {
private static CompletionQueueSafeHandle GetCompletionQueue()
{
return GrpcEnvironment.ThreadPool.CompletionQueue;
}
}
}

@ -39,7 +39,7 @@ namespace Grpc.Core
public class Channel : IDisposable
{
readonly ChannelSafeHandle handle;
readonly String target;
readonly string target;
/// <summary>
/// Creates a channel.

@ -44,7 +44,7 @@ namespace Grpc.Core
public class Builder
{
Dictionary<string,string> stringArgs = new Dictionary<string,string>();
Dictionary<string, string> stringArgs = new Dictionary<string, string>();
// TODO: AddInteger not supported yet.
public Builder AddString(string key, string value)
{
@ -58,7 +58,7 @@ namespace Grpc.Core
}
}
Dictionary<string,string> stringArgs;
Dictionary<string, string> stringArgs;
private ChannelArgs(Dictionary<string, string> stringArgs)
{

@ -74,4 +74,3 @@ namespace Grpc.Core
}
}
}

@ -63,8 +63,9 @@ namespace Grpc.Core
/// lifetime (and call Shutdown once you're done), for the sake of easier testing it's
/// allowed to initialize the environment again after it has been successfully shutdown.
/// </summary>
public static void Initialize() {
lock(staticLock)
public static void Initialize()
{
lock (staticLock)
{
if (instance == null)
{
@ -79,7 +80,7 @@ namespace Grpc.Core
/// </summary>
public static void Shutdown()
{
lock(staticLock)
lock (staticLock)
{
if (instance != null)
{
@ -133,4 +134,3 @@ namespace Grpc.Core
}
}
}

@ -54,7 +54,7 @@ namespace Grpc.Core.Internal
TaskCompletionSource<TResponse> unaryResponseTcs;
// Set after status is received. Only used for streaming response calls.
Nullable<Status> finishedStatus;
Status? finishedStatus;
bool readObserverCompleted; // True if readObserver has already been completed.
@ -64,7 +64,7 @@ namespace Grpc.Core.Internal
this.finishedHandler = CreateBatchCompletionCallback(HandleFinished);
}
public void Initialize(Channel channel, CompletionQueueSafeHandle cq, String methodName)
public void Initialize(Channel channel, CompletionQueueSafeHandle cq, string methodName)
{
var call = CallSafeHandle.Create(channel.Handle, cq, methodName, channel.Target, Timespec.InfFuture);
InitializeInternal(call);
@ -77,9 +77,9 @@ namespace Grpc.Core.Internal
/// <summary>
/// Blocking unary request - unary response call.
/// </summary>
public TResponse UnaryCall(Channel channel, String methodName, TRequest msg)
public TResponse UnaryCall(Channel channel, string methodName, TRequest msg)
{
using(CompletionQueueSafeHandle cq = CompletionQueueSafeHandle.Create())
using (CompletionQueueSafeHandle cq = CompletionQueueSafeHandle.Create())
{
byte[] payload = UnsafeSerialize(msg);
@ -254,7 +254,7 @@ namespace Grpc.Core.Internal
/// </summary>
private void HandleUnaryResponse(bool wasError, BatchContextSafeHandleNotOwned ctx)
{
lock(myLock)
lock (myLock)
{
finished = true;
halfclosed = true;
@ -264,9 +264,7 @@ namespace Grpc.Core.Internal
if (wasError)
{
unaryResponseTcs.SetException(new RpcException(
new Status(StatusCode.Internal, "Internal error occured.")
));
unaryResponseTcs.SetException(new RpcException(new Status(StatusCode.Internal, "Internal error occured.")));
return;
}

@ -225,7 +225,7 @@ namespace Grpc.Core.Internal
payload = serializer(msg);
return true;
}
catch(Exception)
catch (Exception)
{
Console.WriteLine("Exception occured while trying to serialize message");
payload = null;
@ -240,7 +240,7 @@ namespace Grpc.Core.Internal
msg = deserializer(payload);
return true;
}
catch(Exception)
catch (Exception)
{
Console.WriteLine("Exception occured while trying to deserialize message");
msg = default(TRead);
@ -254,7 +254,7 @@ namespace Grpc.Core.Internal
{
readObserver.OnNext(value);
}
catch(Exception e)
catch (Exception e)
{
Console.WriteLine("Exception occured while invoking readObserver.OnNext: " + e);
}
@ -266,7 +266,7 @@ namespace Grpc.Core.Internal
{
readObserver.OnCompleted();
}
catch(Exception e)
catch (Exception e)
{
Console.WriteLine("Exception occured while invoking readObserver.OnCompleted: " + e);
}
@ -278,7 +278,7 @@ namespace Grpc.Core.Internal
{
readObserver.OnError(error);
}
catch(Exception e)
catch (Exception e)
{
Console.WriteLine("Exception occured while invoking readObserver.OnError: " + e);
}
@ -290,7 +290,7 @@ namespace Grpc.Core.Internal
{
completionDelegate(error);
}
catch(Exception e)
catch (Exception e)
{
Console.WriteLine("Exception occured while invoking completion delegate: " + e);
}
@ -302,14 +302,15 @@ namespace Grpc.Core.Internal
/// </summary>
protected CompletionCallbackDelegate CreateBatchCompletionCallback(Action<bool, BatchContextSafeHandleNotOwned> handler)
{
return new CompletionCallbackDelegate( (error, batchContextPtr) => {
return new CompletionCallbackDelegate((error, batchContextPtr) =>
{
try
{
var ctx = new BatchContextSafeHandleNotOwned(batchContextPtr);
bool wasError = (error != GRPCOpError.GRPC_OP_OK);
handler(wasError, ctx);
}
catch(Exception e)
catch (Exception e)
{
Console.WriteLine("Caught exception in a native handler: " + e);
}
@ -363,7 +364,6 @@ namespace Grpc.Core.Internal
{
FireCompletion(origCompletionDelegate, null);
}
}
/// <summary>

@ -91,5 +91,4 @@ namespace Grpc.Core.Internal
tcs.SetException(error);
}
}
}

@ -80,16 +80,18 @@ namespace Grpc.Core.Internal
{
return null;
}
byte[] data = new byte[(int) len];
byte[] data = new byte[(int)len];
grpcsharp_batch_context_recv_message_to_buffer(this, data, new UIntPtr((ulong)data.Length));
return data;
}
public CallSafeHandle GetServerRpcNewCall() {
public CallSafeHandle GetServerRpcNewCall()
{
return grpcsharp_batch_context_server_rpc_new_call(this);
}
public string GetServerRpcNewMethod() {
public string GetServerRpcNewMethod()
{
return Marshal.PtrToStringAnsi(grpcsharp_batch_context_server_rpc_new_method(this));
}
}

@ -36,13 +36,14 @@ using Grpc.Core;
namespace Grpc.Core.Internal
{
internal delegate void CompletionCallbackDelegate(GRPCOpError error,IntPtr batchContextPtr);
internal delegate void CompletionCallbackDelegate(GRPCOpError error, IntPtr batchContextPtr);
/// <summary>
/// grpc_call from <grpc/grpc.h>
/// </summary>
internal class CallSafeHandle : SafeHandleZeroIsInvalid
{
const UInt32 GRPC_WRITE_BUFFER_HINT = 1;
const uint GRPC_WRITE_BUFFER_HINT = 1;
[DllImport("grpc_csharp_ext.dll")]
static extern CallSafeHandle grpcsharp_channel_create_call(ChannelSafeHandle channel, CompletionQueueSafeHandle cq, string method, string host, Timespec deadline);
@ -179,7 +180,7 @@ namespace Grpc.Core.Internal
Trace.Assert(callError == GRPCCallError.GRPC_CALL_OK, "Status not GRPC_CALL_OK");
}
private static UInt32 GetFlags(bool buffered)
private static uint GetFlags(bool buffered)
{
return buffered ? 0 : GRPC_WRITE_BUFFER_HINT;
}

@ -74,4 +74,3 @@ namespace Grpc.Core.Internal
}
}
}

@ -77,4 +77,3 @@ namespace Grpc.Core.Internal
}
}
}

@ -112,4 +112,3 @@ namespace Grpc.Core.Internal
GRPC_OP_ERROR
}
}

@ -40,7 +40,7 @@ using System.Threading;
namespace Grpc.Core.Internal
{
internal delegate void GprLogDelegate(IntPtr fileStringPtr, Int32 line, UInt64 threadId, IntPtr severityStringPtr, IntPtr msgPtr);
internal delegate void GprLogDelegate(IntPtr fileStringPtr, int line, ulong threadId, IntPtr severityStringPtr, IntPtr msgPtr);
/// <summary>
/// Logs from gRPC C core library can get lost if your application is not a console app.
@ -73,7 +73,7 @@ namespace Grpc.Core.Internal
}
}
private static void HandleWrite(IntPtr fileStringPtr, Int32 line, UInt64 threadId, IntPtr severityStringPtr, IntPtr msgPtr)
private static void HandleWrite(IntPtr fileStringPtr, int line, ulong threadId, IntPtr severityStringPtr, IntPtr msgPtr)
{
try
{

@ -51,12 +51,13 @@ namespace Grpc.Core.Internal
CompletionQueueSafeHandle cq;
public GrpcThreadPool(int poolSize) {
public GrpcThreadPool(int poolSize)
{
this.poolSize = poolSize;
}
public void Start() {
public void Start()
{
lock (myLock)
{
if (cq != null)
@ -73,8 +74,8 @@ namespace Grpc.Core.Internal
}
}
public void Stop() {
public void Stop()
{
lock (myLock)
{
cq.Shutdown();
@ -86,7 +87,6 @@ namespace Grpc.Core.Internal
}
cq.Dispose();
}
}
@ -116,10 +116,9 @@ namespace Grpc.Core.Internal
do
{
completionType = cq.NextWithCallback();
} while(completionType != GRPCCompletionType.GRPC_QUEUE_SHUTDOWN);
}
while (completionType != GRPCCompletionType.GRPC_QUEUE_SHUTDOWN);
Console.WriteLine("Completion queue has shutdown successfully, thread " + Thread.CurrentThread.Name + " exiting.");
}
}
}

@ -64,4 +64,3 @@ namespace Grpc.Core.Internal
}
}
}

@ -53,10 +53,10 @@ namespace Grpc.Core.Internal
static extern ServerSafeHandle grpcsharp_server_create(CompletionQueueSafeHandle cq, IntPtr args);
[DllImport("grpc_csharp_ext.dll")]
static extern Int32 grpcsharp_server_add_http2_port(ServerSafeHandle server, string addr);
static extern int grpcsharp_server_add_http2_port(ServerSafeHandle server, string addr);
[DllImport("grpc_csharp_ext.dll")]
static extern Int32 grpcsharp_server_add_secure_http2_port(ServerSafeHandle server, string addr, ServerCredentialsSafeHandle creds);
static extern int grpcsharp_server_add_secure_http2_port(ServerSafeHandle server, string addr, ServerCredentialsSafeHandle creds);
[DllImport("grpc_csharp_ext.dll")]
static extern void grpcsharp_server_start(ServerSafeHandle server);

@ -40,8 +40,8 @@ namespace Grpc.Core.Internal
[StructLayout(LayoutKind.Sequential)]
internal struct Timespec
{
const int nanosPerSecond = 1000 * 1000 * 1000;
const int nanosPerTick = 100;
const int NanosPerSecond = 1000 * 1000 * 1000;
const int NanosPerTick = 100;
[DllImport("grpc_csharp_ext.dll")]
static extern Timespec gprsharp_now();
@ -99,14 +99,13 @@ namespace Grpc.Core.Internal
public Timespec Add(TimeSpan timeSpan)
{
long nanos = tv_nsec.ToInt64() + (timeSpan.Ticks % TimeSpan.TicksPerSecond) * nanosPerTick;
long overflow_sec = (nanos > nanosPerSecond) ? 1 : 0;
long nanos = tv_nsec.ToInt64() + (timeSpan.Ticks % TimeSpan.TicksPerSecond) * NanosPerTick;
long overflow_sec = (nanos > NanosPerSecond) ? 1 : 0;
Timespec result;
result.tv_nsec = new IntPtr(nanos % nanosPerSecond);
result.tv_nsec = new IntPtr(nanos % NanosPerSecond);
result.tv_sec = new IntPtr(tv_sec.ToInt64() + (timeSpan.Ticks / TimeSpan.TicksPerSecond) + overflow_sec);
return result;
}
}
}

@ -40,8 +40,8 @@ namespace Grpc.Core
/// </summary>
public struct Marshaller<T>
{
readonly Func<T,byte[]> serializer;
readonly Func<byte[],T> deserializer;
readonly Func<T, byte[]> serializer;
readonly Func<byte[], T> deserializer;
public Marshaller(Func<T, byte[]> serializer, Func<byte[], T> deserializer)
{
@ -66,9 +66,9 @@ namespace Grpc.Core
}
}
public static class Marshallers {
public static Marshaller<T> Create<T>(Func<T,byte[]> serializer, Func<byte[],T> deserializer)
public static class Marshallers
{
public static Marshaller<T> Create<T>(Func<T, byte[]> serializer, Func<byte[], T> deserializer)
{
return new Marshaller<T>(serializer, deserializer);
}
@ -81,7 +81,5 @@ namespace Grpc.Core
System.Text.Encoding.UTF8.GetString);
}
}
}
}

@ -94,4 +94,3 @@ namespace Grpc.Core
}
}
}

@ -1,24 +1,14 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle ("Grpc.Core")]
[assembly: AssemblyDescription ("")]
[assembly: AssemblyConfiguration ("")]
[assembly: AssemblyCompany ("")]
[assembly: AssemblyProduct ("")]
[assembly: AssemblyCopyright ("Google Inc. All rights reserved.")]
[assembly: AssemblyTrademark ("")]
[assembly: AssemblyCulture ("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion ("0.1.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
//[assembly: AssemblyDelaySign(false)]
//[assembly: AssemblyKeyFile("")]
[assembly: AssemblyTitle("Grpc.Core")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("Google Inc. All rights reserved.")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: AssemblyVersion("0.1.*")]
[assembly: InternalsVisibleTo("Grpc.Core.Tests")]

@ -58,4 +58,3 @@ namespace Grpc.Core
}
}
}

@ -67,8 +67,9 @@ namespace Grpc.Core
}
// only call this before Start()
public void AddServiceDefinition(ServerServiceDefinition serviceDefinition) {
foreach(var entry in serviceDefinition.CallHandlers)
public void AddServiceDefinition(ServerServiceDefinition serviceDefinition)
{
foreach (var entry in serviceDefinition.CallHandlers)
{
callHandlers.Add(entry.Key, entry.Value);
}
@ -108,7 +109,7 @@ namespace Grpc.Core
{
var rpcInfo = newRpcQueue.Take();
//Console.WriteLine("Server received RPC " + rpcInfo.Method);
// Console.WriteLine("Server received RPC " + rpcInfo.Method);
IServerCallHandler callHandler;
if (!callHandlers.TryGetValue(rpcInfo.Method, out callHandler))
@ -117,7 +118,7 @@ namespace Grpc.Core
}
callHandler.StartCall(rpcInfo.Method, rpcInfo.Call, GetCompletionQueue());
}
catch(Exception e)
catch (Exception e)
{
Console.WriteLine("Exception while handling RPC: " + e);
}
@ -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);
}
}

@ -70,7 +70,6 @@ namespace Grpc.Core
handler(request, responseObserver);
finishedTask.Wait();
}
}
@ -93,7 +92,7 @@ namespace Grpc.Core
asyncCall.Initialize(call);
var responseObserver = new ServerStreamingOutputObserver<TRequest,TResponse>(asyncCall);
var responseObserver = new ServerStreamingOutputObserver<TRequest, TResponse>(asyncCall);
var requestObserver = handler(responseObserver);
var finishedTask = asyncCall.ServerSideCallAsync(requestObserver);
finishedTask.Wait();
@ -113,7 +112,7 @@ namespace Grpc.Core
var finishedTask = asyncCall.ServerSideCallAsync(new NullObserver<byte[]>());
// TODO: check result of the completion status.
asyncCall.StartSendStatusFromServer(new Status(StatusCode.Unimplemented, "No such method."), new AsyncCompletionDelegate((error) => {}));
asyncCall.StartSendStatusFromServer(new Status(StatusCode.Unimplemented, "No such method."), new AsyncCompletionDelegate((error) => { }));
finishedTask.Wait();
}
@ -132,7 +131,5 @@ namespace Grpc.Core
public void OnNext(T value)
{
}
}
}

@ -37,12 +37,12 @@ namespace Grpc.Core
{
// TODO: perhaps add also serverSideStreaming and clientSideStreaming
public delegate void UnaryRequestServerMethod<TRequest, TResponse> (TRequest request, IObserver<TResponse> responseObserver);
public delegate void UnaryRequestServerMethod<TRequest, TResponse>(TRequest request, IObserver<TResponse> responseObserver);
public delegate IObserver<TRequest> StreamingRequestServerMethod<TRequest, TResponse> (IObserver<TResponse> responseObserver);
internal static class ServerCalls {
public delegate IObserver<TRequest> StreamingRequestServerMethod<TRequest, TResponse>(IObserver<TResponse> responseObserver);
internal static class ServerCalls
{
public static IServerCallHandler UnaryRequestCall<TRequest, TResponse>(Method<TRequest, TResponse> method, UnaryRequestServerMethod<TRequest, TResponse> handler)
{
return new UnaryRequestServerCallHandler<TRequest, TResponse>(method, handler);
@ -52,7 +52,5 @@ namespace Grpc.Core
{
return new StreamingRequestServerCallHandler<TRequest, TResponse>(method, handler);
}
}
}

@ -104,4 +104,3 @@ namespace Grpc.Core
}
}
}

@ -56,8 +56,7 @@ namespace Grpc.Core
}
}
public static Builder CreateBuilder(String serviceName)
public static Builder CreateBuilder(string serviceName)
{
return new Builder(serviceName);
}
@ -65,7 +64,7 @@ namespace Grpc.Core
public class Builder
{
readonly string serviceName;
readonly Dictionary<string, IServerCallHandler> callHandlers = new Dictionary<String, IServerCallHandler>();
readonly Dictionary<string, IServerCallHandler> callHandlers = new Dictionary<string, IServerCallHandler>();
public Builder(string serviceName)
{
@ -95,4 +94,3 @@ namespace Grpc.Core
}
}
}

@ -139,4 +139,3 @@ namespace Grpc.Core
DataLoss = 15
}
}

@ -32,10 +32,10 @@
#endregion
using System;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading.Tasks;
namespace Grpc.Core.Utils
{
@ -61,8 +61,7 @@ namespace Grpc.Core.Utils
}
stopwatch.Stop();
Console.WriteLine("Elapsed time: " + stopwatch.ElapsedMilliseconds + "ms");
Console.WriteLine("Ops per second: " + (int) ((double) benchmarkIterations * 1000 / stopwatch.ElapsedMilliseconds));
Console.WriteLine("Ops per second: " + (int)((double)benchmarkIterations * 1000 / stopwatch.ElapsedMilliseconds));
}
}
}

@ -42,7 +42,8 @@ namespace Grpc.Core.Utils
/// Otherwise, rethrows the original aggregate exception.
/// Always throws, the exception return type is here only to make the.
/// </summary>
public static Exception UnwrapRpcException(AggregateException ae) {
public static Exception UnwrapRpcException(AggregateException ae)
{
foreach (var e in ae.InnerExceptions)
{
if (e is RpcException)
@ -54,4 +55,3 @@ namespace Grpc.Core.Utils
}
}
}

@ -32,10 +32,10 @@
#endregion
using System;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading.Tasks;
namespace Grpc.Core.Utils
{
@ -66,7 +66,7 @@ namespace Grpc.Core.Utils
/// <summary>
/// Throws NullReferenceException if reference is null.
/// </summary>
public static T CheckNotNull<T> (T reference)
public static T CheckNotNull<T>(T reference)
{
if (reference == null)
{
@ -78,7 +78,7 @@ namespace Grpc.Core.Utils
/// <summary>
/// Throws NullReferenceException with given message if reference is null.
/// </summary>
public static T CheckNotNull<T> (T reference, string errorMessage)
public static T CheckNotNull<T>(T reference, string errorMessage)
{
if (reference == null)
{
@ -110,4 +110,3 @@ namespace Grpc.Core.Utils
}
}
}

@ -57,9 +57,9 @@ namespace Grpc.Core.Utils
data.Add(value);
}
public Task<List<T>> ToList() {
public Task<List<T>> ToList()
{
return tcs.Task;
}
}
}

@ -32,9 +32,9 @@
#endregion
using System;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Grpc.Core.Utils
{
@ -81,4 +81,3 @@ namespace Grpc.Core.Utils
}
}
}

@ -1,22 +1,12 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle ("Grpc.Examples.MathClient")]
[assembly: AssemblyDescription ("")]
[assembly: AssemblyConfiguration ("")]
[assembly: AssemblyCompany ("")]
[assembly: AssemblyProduct ("")]
[assembly: AssemblyCopyright ("Google Inc. All rights reserved.")]
[assembly: AssemblyTrademark ("")]
[assembly: AssemblyCulture ("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion ("0.1.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
//[assembly: AssemblyDelaySign(false)]
//[assembly: AssemblyKeyFile("")]
[assembly: AssemblyTitle("Grpc.Examples.MathClient")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("Google Inc. All rights reserved.")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: AssemblyVersion("0.1.*")]

@ -105,7 +105,7 @@ namespace math.Tests
var recorder = new RecordingObserver<Num>();
client.Fib(new FibArgs.Builder { Limit = 6 }.Build(), recorder);
CollectionAssert.AreEqual(new List<long>{1, 1, 2, 3, 5, 8},
CollectionAssert.AreEqual(new List<long> { 1, 1, 2, 3, 5, 8 },
recorder.ToList().Result.ConvertAll((n) => n.Num_));
}
@ -114,7 +114,8 @@ namespace math.Tests
public void Sum()
{
var res = client.Sum();
foreach (var num in new long[] { 10, 20, 30 }) {
foreach (var num in new long[] { 10, 20, 30 })
{
res.Inputs.OnNext(Num.CreateBuilder().SetNum_(num).Build());
}
res.Inputs.OnCompleted();
@ -125,7 +126,8 @@ namespace math.Tests
[Test]
public void DivMany()
{
List<DivArgs> divArgsList = new List<DivArgs>{
List<DivArgs> divArgsList = new List<DivArgs>
{
new DivArgs.Builder { Dividend = 10, Divisor = 3 }.Build(),
new DivArgs.Builder { Dividend = 100, Divisor = 21 }.Build(),
new DivArgs.Builder { Dividend = 7, Divisor = 2 }.Build()
@ -142,9 +144,8 @@ namespace math.Tests
var result = recorder.ToList().Result;
CollectionAssert.AreEqual(new long[] {3, 4, 3}, result.ConvertAll((divReply) => divReply.Quotient));
CollectionAssert.AreEqual(new long[] {1, 16, 1}, result.ConvertAll((divReply) => divReply.Remainder));
CollectionAssert.AreEqual(new long[] { 3, 4, 3 }, result.ConvertAll((divReply) => divReply.Quotient));
CollectionAssert.AreEqual(new long[] { 1, 16, 1 }, result.ConvertAll((divReply) => divReply.Remainder));
}
}
}

@ -1,8 +1,6 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle("Grpc.Examples.Tests")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
@ -11,12 +9,4 @@ using System.Runtime.CompilerServices;
[assembly: AssemblyCopyright("Google Inc. All rights reserved.")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("0.1.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
//[assembly: AssemblyDelaySign(false)]
//[assembly: AssemblyKeyFile("")]

@ -71,7 +71,8 @@ namespace math
public static void SumExample(MathGrpc.IMathServiceClient stub)
{
List<Num> numbers = new List<Num>
{new Num.Builder { Num_ = 1 }.Build(),
{
new Num.Builder { Num_ = 1 }.Build(),
new Num.Builder { Num_ = 2 }.Build(),
new Num.Builder { Num_ = 3 }.Build()
};
@ -110,24 +111,12 @@ namespace math
public static void DependendRequestsExample(MathGrpc.IMathServiceClient stub)
{
var numberList = new List<Num>
{ new Num.Builder{ Num_ = 1 }.Build(),
new Num.Builder{ Num_ = 2 }.Build(), new Num.Builder{ Num_ = 3 }.Build()
{
new Num.Builder { Num_ = 1 }.Build(),
new Num.Builder { Num_ = 2 }.Build(), new Num.Builder { Num_ = 3 }.Build()
};
numberList.ToObservable();
//IObserver<Num> numbers;
//Task<Num> call = stub.Sum(out numbers);
//foreach (var num in numberList)
//{
// numbers.OnNext(num);
//}
//numbers.OnCompleted();
//Num sum = call.Result;
//DivReply result = stub.Div(new DivArgs.Builder { Dividend = sum.Num_, Divisor = numberList.Count }.Build());
}
}
}

@ -73,8 +73,8 @@ namespace math
public IObserver<Num> Sum(IObserver<Num> responseObserver)
{
var recorder = new RecordingObserver<Num>();
Task.Factory.StartNew(() => {
Task.Factory.StartNew(() =>
{
List<Num> inputs = recorder.ToList().Result;
long sum = 0;
@ -104,7 +104,7 @@ namespace math
static IEnumerable<Num> FibInternal(long n)
{
long a = 1;
yield return new Num.Builder { Num_=a }.Build();
yield return new Num.Builder { Num_ = a }.Build();
long b = 1;
for (long i = 0; i < n - 1; i++)
@ -112,12 +112,12 @@ namespace math
long temp = a;
a = b;
b = temp + b;
yield return new Num.Builder { Num_=a }.Build();
yield return new Num.Builder { Num_ = a }.Build();
}
}
private class DivObserver : IObserver<DivArgs> {
private class DivObserver : IObserver<DivArgs>
{
readonly IObserver<DivReply> responseObserver;
public DivObserver(IObserver<DivReply> responseObserver)
@ -142,4 +142,3 @@ namespace math
}
}
}

@ -1,22 +1,12 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle ("Grpc.Examples")]
[assembly: AssemblyDescription ("")]
[assembly: AssemblyConfiguration ("")]
[assembly: AssemblyCompany ("")]
[assembly: AssemblyProduct ("")]
[assembly: AssemblyCopyright ("Google Inc. All rights reserved.")]
[assembly: AssemblyTrademark ("")]
[assembly: AssemblyCulture ("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion ("0.1.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
//[assembly: AssemblyDelaySign(false)]
//[assembly: AssemblyKeyFile("")]
[assembly: AssemblyTitle("Grpc.Examples")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("Google Inc. All rights reserved.")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: AssemblyVersion("0.1.*")]

@ -1,8 +1,6 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle("Grpc.IntegrationTesting.Client")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
@ -11,12 +9,4 @@ using System.Runtime.CompilerServices;
[assembly: AssemblyCopyright("Google Inc. All rights reserved.")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("0.1.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
//[assembly: AssemblyDelaySign(false)]
//[assembly: AssemblyKeyFile("")]

@ -1,8 +1,6 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle("Grpc.IntegrationTesting.Server")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
@ -11,12 +9,4 @@ using System.Runtime.CompilerServices;
[assembly: AssemblyCopyright("Google Inc. All rights reserved.")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("0.1.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
//[assembly: AssemblyDelaySign(false)]
//[assembly: AssemblyKeyFile("")]

@ -38,10 +38,10 @@ using System.IO;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Google.ProtocolBuffers;
using grpc.testing;
using Grpc.Core;
using Grpc.Core.Utils;
using NUnit.Framework;
using grpc.testing;
namespace Grpc.IntegrationTesting
{
@ -50,7 +50,7 @@ namespace Grpc.IntegrationTesting
private class ClientOptions
{
public bool help;
public string serverHost= "127.0.0.1";
public string serverHost = "127.0.0.1";
public string serverHostOverride = TestCredentials.DefaultHostOverride;
public int? serverPort;
public string testCase = "large_unary";
@ -180,7 +180,7 @@ namespace Grpc.IntegrationTesting
{
Console.WriteLine("running client_streaming");
var bodySizes = new List<int>{27182, 8, 1828, 45904};
var bodySizes = new List<int> { 27182, 8, 1828, 45904 };
var context = client.StreamingInputCall();
foreach (var size in bodySizes)
@ -199,7 +199,7 @@ namespace Grpc.IntegrationTesting
{
Console.WriteLine("running server_streaming");
var bodySizes = new List<int>{31415, 9, 2653, 58979};
var bodySizes = new List<int> { 31415, 9, 2653, 58979 };
var request = StreamingOutputCallRequest.CreateBuilder()
.SetResponseType(PayloadType.COMPRESSABLE)
@ -256,7 +256,6 @@ namespace Grpc.IntegrationTesting
Assert.AreEqual(PayloadType.COMPRESSABLE, response.Payload.Type);
Assert.AreEqual(2653, response.Payload.Body.Length);
inputs.OnNext(StreamingOutputCallRequest.CreateBuilder()
.SetResponseType(PayloadType.COMPRESSABLE)
.AddResponseParameters(ResponseParameters.CreateBuilder().SetSize(58979))
@ -292,17 +291,18 @@ namespace Grpc.IntegrationTesting
public static void RunBenchmarkEmptyUnary(TestServiceGrpc.ITestServiceClient client)
{
BenchmarkUtil.RunBenchmark(10000, 10000,
() => { client.EmptyCall(Empty.DefaultInstance);});
() => { client.EmptyCall(Empty.DefaultInstance); });
}
private static Payload CreateZerosPayload(int size) {
private static Payload CreateZerosPayload(int size)
{
return Payload.CreateBuilder().SetBody(ByteString.CopyFrom(new byte[size])).Build();
}
private static ClientOptions ParseArguments(string[] args)
{
var options = new ClientOptions();
foreach(string arg in args)
foreach (string arg in args)
{
ParseArgument(arg, options);
if (options.help)

@ -35,10 +35,10 @@ using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using grpc.testing;
using Grpc.Core;
using Grpc.Core.Utils;
using NUnit.Framework;
using grpc.testing;
namespace Grpc.IntegrationTesting
{
@ -117,7 +117,5 @@ namespace Grpc.IntegrationTesting
// TODO: add cancel_after_begin
// TODO: add cancel_after_first_response
}
}

@ -38,10 +38,10 @@ using System.IO;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Google.ProtocolBuffers;
using grpc.testing;
using Grpc.Core;
using Grpc.Core.Utils;
using NUnit.Framework;
using grpc.testing;
namespace Grpc.IntegrationTesting
{
@ -113,7 +113,7 @@ namespace Grpc.IntegrationTesting
private static ServerOptions ParseArguments(string[] args)
{
var options = new ServerOptions();
foreach(string arg in args)
foreach (string arg in args)
{
ParseArgument(arg, options);
if (options.help)

@ -1,8 +1,6 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle("Grpc.IntegrationTesting")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
@ -11,12 +9,4 @@ using System.Runtime.CompilerServices;
[assembly: AssemblyCopyright("Google Inc. All rights reserved.")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("0.1.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
//[assembly: AssemblyDelaySign(false)]
//[assembly: AssemblyKeyFile("")]

@ -38,10 +38,10 @@ using System.IO;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Google.ProtocolBuffers;
using grpc.testing;
using Grpc.Core;
using Grpc.Core.Utils;
using NUnit.Framework;
using grpc.testing;
namespace Grpc.IntegrationTesting
{
@ -77,7 +77,7 @@ namespace Grpc.IntegrationTesting
var keyCertPair = new KeyCertificatePair(
File.ReadAllText(ServerCertChainPath),
File.ReadAllText(ServerPrivateKeyPath));
return new SslServerCredentials(new List<KeyCertificatePair> {keyCertPair});
return new SslServerCredentials(new List<KeyCertificatePair> { keyCertPair });
}
}
}

@ -55,14 +55,14 @@ namespace grpc.testing
{
var response = SimpleResponse.CreateBuilder()
.SetPayload(CreateZerosPayload(request.ResponseSize)).Build();
//TODO: check we support ReponseType
// TODO: check we support ReponseType
responseObserver.OnNext(response);
responseObserver.OnCompleted();
}
public void StreamingOutputCall(StreamingOutputCallRequest request, IObserver<StreamingOutputCallResponse> responseObserver)
{
foreach(var responseParam in request.ResponseParametersList)
foreach (var responseParam in request.ResponseParametersList)
{
var response = StreamingOutputCallResponse.CreateBuilder()
.SetPayload(CreateZerosPayload(responseParam.Size)).Build();
@ -74,9 +74,10 @@ namespace grpc.testing
public IObserver<StreamingInputCallRequest> StreamingInputCall(IObserver<StreamingInputCallResponse> responseObserver)
{
var recorder = new RecordingObserver<StreamingInputCallRequest>();
Task.Run(() => {
Task.Run(() =>
{
int sum = 0;
foreach(var req in recorder.ToList().Result)
foreach (var req in recorder.ToList().Result)
{
sum += req.Payload.Body.Length;
}
@ -98,8 +99,8 @@ namespace grpc.testing
throw new NotImplementedException();
}
private class FullDuplexObserver : IObserver<StreamingOutputCallRequest> {
private class FullDuplexObserver : IObserver<StreamingOutputCallRequest>
{
readonly IObserver<StreamingOutputCallResponse> responseObserver;
public FullDuplexObserver(IObserver<StreamingOutputCallResponse> responseObserver)
@ -119,22 +120,18 @@ namespace grpc.testing
public void OnNext(StreamingOutputCallRequest value)
{
// TODO: this is not in order!!!
//Task.Factory.StartNew(() => {
foreach(var responseParam in value.ResponseParametersList)
{
var response = StreamingOutputCallResponse.CreateBuilder()
.SetPayload(CreateZerosPayload(responseParam.Size)).Build();
responseObserver.OnNext(response);
}
//});
foreach (var responseParam in value.ResponseParametersList)
{
var response = StreamingOutputCallResponse.CreateBuilder()
.SetPayload(CreateZerosPayload(responseParam.Size)).Build();
responseObserver.OnNext(response);
}
}
}
private static Payload CreateZerosPayload(int size) {
private static Payload CreateZerosPayload(int size)
{
return Payload.CreateBuilder().SetBody(ByteString.CopyFrom(new byte[size])).Build();
}
}
}

Loading…
Cancel
Save