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); var call = new Call<string, string>(unaryEchoStringMethod, channel);
try { try
{
Calls.BlockingUnaryCall(call, "ABC", default(CancellationToken)); Calls.BlockingUnaryCall(call, "ABC", default(CancellationToken));
Assert.Fail(); Assert.Fail();
} catch(RpcException e) { }
catch (RpcException e)
{
Assert.AreEqual(StatusCode.Unimplemented, e.Status.StatusCode); 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; var tp2 = GrpcEnvironment.ThreadPool;
GrpcEnvironment.Shutdown(); GrpcEnvironment.Shutdown();
Assert.IsFalse(Object.ReferenceEquals(tp1, tp2)); Assert.IsFalse(object.ReferenceEquals(tp1, tp2));
} }
} }
} }

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

@ -1,8 +1,6 @@
using System.Reflection; using System.Reflection;
using System.Runtime.CompilerServices; 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: AssemblyTitle("Grpc.Core.Tests")]
[assembly: AssemblyDescription("")] [assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
@ -11,12 +9,4 @@ using System.Runtime.CompilerServices;
[assembly: AssemblyCopyright("Google Inc. All rights reserved.")] [assembly: AssemblyCopyright("Google Inc. All rights reserved.")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")] [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.*")] [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(); GrpcEnvironment.Shutdown();
} }
} }
} }

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

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

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

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

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

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

@ -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 /// 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. /// allowed to initialize the environment again after it has been successfully shutdown.
/// </summary> /// </summary>
public static void Initialize() { public static void Initialize()
lock(staticLock) {
lock (staticLock)
{ {
if (instance == null) if (instance == null)
{ {
@ -79,7 +80,7 @@ namespace Grpc.Core
/// </summary> /// </summary>
public static void Shutdown() public static void Shutdown()
{ {
lock(staticLock) lock (staticLock)
{ {
if (instance != null) if (instance != null)
{ {
@ -133,4 +134,3 @@ namespace Grpc.Core
} }
} }
} }

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

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

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

@ -80,16 +80,18 @@ namespace Grpc.Core.Internal
{ {
return null; 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)); grpcsharp_batch_context_recv_message_to_buffer(this, data, new UIntPtr((ulong)data.Length));
return data; return data;
} }
public CallSafeHandle GetServerRpcNewCall() { public CallSafeHandle GetServerRpcNewCall()
{
return grpcsharp_batch_context_server_rpc_new_call(this); 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)); return Marshal.PtrToStringAnsi(grpcsharp_batch_context_server_rpc_new_method(this));
} }
} }

@ -36,13 +36,14 @@ using Grpc.Core;
namespace Grpc.Core.Internal namespace Grpc.Core.Internal
{ {
internal delegate void CompletionCallbackDelegate(GRPCOpError error,IntPtr batchContextPtr); internal delegate void CompletionCallbackDelegate(GRPCOpError error, IntPtr batchContextPtr);
/// <summary> /// <summary>
/// grpc_call from <grpc/grpc.h> /// grpc_call from <grpc/grpc.h>
/// </summary> /// </summary>
internal class CallSafeHandle : SafeHandleZeroIsInvalid internal class CallSafeHandle : SafeHandleZeroIsInvalid
{ {
const UInt32 GRPC_WRITE_BUFFER_HINT = 1; const uint GRPC_WRITE_BUFFER_HINT = 1;
[DllImport("grpc_csharp_ext.dll")] [DllImport("grpc_csharp_ext.dll")]
static extern CallSafeHandle grpcsharp_channel_create_call(ChannelSafeHandle channel, CompletionQueueSafeHandle cq, string method, string host, Timespec deadline); 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"); 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; 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 GRPC_OP_ERROR
} }
} }

@ -40,7 +40,7 @@ using System.Threading;
namespace Grpc.Core.Internal 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> /// <summary>
/// Logs from gRPC C core library can get lost if your application is not a console app. /// 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 try
{ {

@ -51,12 +51,13 @@ namespace Grpc.Core.Internal
CompletionQueueSafeHandle cq; CompletionQueueSafeHandle cq;
public GrpcThreadPool(int poolSize) { public GrpcThreadPool(int poolSize)
{
this.poolSize = poolSize; this.poolSize = poolSize;
} }
public void Start() { public void Start()
{
lock (myLock) lock (myLock)
{ {
if (cq != null) if (cq != null)
@ -73,8 +74,8 @@ namespace Grpc.Core.Internal
} }
} }
public void Stop() { public void Stop()
{
lock (myLock) lock (myLock)
{ {
cq.Shutdown(); cq.Shutdown();
@ -86,7 +87,6 @@ namespace Grpc.Core.Internal
} }
cq.Dispose(); cq.Dispose();
} }
} }
@ -116,10 +116,9 @@ namespace Grpc.Core.Internal
do do
{ {
completionType = cq.NextWithCallback(); 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."); 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); static extern ServerSafeHandle grpcsharp_server_create(CompletionQueueSafeHandle cq, IntPtr args);
[DllImport("grpc_csharp_ext.dll")] [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")] [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")] [DllImport("grpc_csharp_ext.dll")]
static extern void grpcsharp_server_start(ServerSafeHandle server); static extern void grpcsharp_server_start(ServerSafeHandle server);

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

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

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

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

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

@ -1,24 +1,14 @@
using System.Reflection; using System.Reflection;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes. [assembly: AssemblyTitle("Grpc.Core")]
// Change them to the values specific to your project. [assembly: AssemblyDescription("")]
[assembly: AssemblyTitle ("Grpc.Core")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyDescription ("")] [assembly: AssemblyCompany("")]
[assembly: AssemblyConfiguration ("")] [assembly: AssemblyProduct("")]
[assembly: AssemblyCompany ("")] [assembly: AssemblyCopyright("Google Inc. All rights reserved.")]
[assembly: AssemblyProduct ("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyCopyright ("Google Inc. All rights reserved.")] [assembly: AssemblyCulture("")]
[assembly: AssemblyTrademark ("")] [assembly: AssemblyVersion("0.1.*")]
[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: InternalsVisibleTo("Grpc.Core.Tests")] [assembly: InternalsVisibleTo("Grpc.Core.Tests")]

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

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

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

@ -37,12 +37,12 @@ namespace Grpc.Core
{ {
// TODO: perhaps add also serverSideStreaming and clientSideStreaming // 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); public delegate IObserver<TRequest> StreamingRequestServerMethod<TRequest, TResponse>(IObserver<TResponse> responseObserver);
internal static class ServerCalls {
internal static class ServerCalls
{
public static IServerCallHandler UnaryRequestCall<TRequest, TResponse>(Method<TRequest, TResponse> method, UnaryRequestServerMethod<TRequest, TResponse> handler) public static IServerCallHandler UnaryRequestCall<TRequest, TResponse>(Method<TRequest, TResponse> method, UnaryRequestServerMethod<TRequest, TResponse> handler)
{ {
return new UnaryRequestServerCallHandler<TRequest, TResponse>(method, handler); return new UnaryRequestServerCallHandler<TRequest, TResponse>(method, handler);
@ -52,7 +52,5 @@ namespace Grpc.Core
{ {
return new StreamingRequestServerCallHandler<TRequest, TResponse>(method, handler); 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); return new Builder(serviceName);
} }
@ -65,7 +64,7 @@ namespace Grpc.Core
public class Builder public class Builder
{ {
readonly string serviceName; 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) public Builder(string serviceName)
{ {
@ -95,4 +94,3 @@ namespace Grpc.Core
} }
} }
} }

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

@ -32,10 +32,10 @@
#endregion #endregion
using System; using System;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Threading.Tasks;
namespace Grpc.Core.Utils namespace Grpc.Core.Utils
{ {
@ -61,8 +61,7 @@ namespace Grpc.Core.Utils
} }
stopwatch.Stop(); stopwatch.Stop();
Console.WriteLine("Elapsed time: " + stopwatch.ElapsedMilliseconds + "ms"); 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. /// Otherwise, rethrows the original aggregate exception.
/// Always throws, the exception return type is here only to make the. /// Always throws, the exception return type is here only to make the.
/// </summary> /// </summary>
public static Exception UnwrapRpcException(AggregateException ae) { public static Exception UnwrapRpcException(AggregateException ae)
{
foreach (var e in ae.InnerExceptions) foreach (var e in ae.InnerExceptions)
{ {
if (e is RpcException) if (e is RpcException)
@ -54,4 +55,3 @@ namespace Grpc.Core.Utils
} }
} }
} }

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

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

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

@ -1,22 +1,12 @@
using System.Reflection; using System.Reflection;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes. [assembly: AssemblyTitle("Grpc.Examples.MathClient")]
// Change them to the values specific to your project. [assembly: AssemblyDescription("")]
[assembly: AssemblyTitle ("Grpc.Examples.MathClient")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyDescription ("")] [assembly: AssemblyCompany("")]
[assembly: AssemblyConfiguration ("")] [assembly: AssemblyProduct("")]
[assembly: AssemblyCompany ("")] [assembly: AssemblyCopyright("Google Inc. All rights reserved.")]
[assembly: AssemblyProduct ("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyCopyright ("Google Inc. All rights reserved.")] [assembly: AssemblyCulture("")]
[assembly: AssemblyTrademark ("")] [assembly: AssemblyVersion("0.1.*")]
[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("")]

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

@ -1,8 +1,6 @@
using System.Reflection; using System.Reflection;
using System.Runtime.CompilerServices; 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: AssemblyTitle("Grpc.Examples.Tests")]
[assembly: AssemblyDescription("")] [assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
@ -11,12 +9,4 @@ using System.Runtime.CompilerServices;
[assembly: AssemblyCopyright("Google Inc. All rights reserved.")] [assembly: AssemblyCopyright("Google Inc. All rights reserved.")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")] [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.*")] [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) public static void SumExample(MathGrpc.IMathServiceClient stub)
{ {
List<Num> numbers = new List<Num> 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_ = 2 }.Build(),
new Num.Builder { Num_ = 3 }.Build() new Num.Builder { Num_ = 3 }.Build()
}; };
@ -110,24 +111,12 @@ namespace math
public static void DependendRequestsExample(MathGrpc.IMathServiceClient stub) public static void DependendRequestsExample(MathGrpc.IMathServiceClient stub)
{ {
var numberList = new List<Num> 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(); 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) public IObserver<Num> Sum(IObserver<Num> responseObserver)
{ {
var recorder = new RecordingObserver<Num>(); var recorder = new RecordingObserver<Num>();
Task.Factory.StartNew(() => { Task.Factory.StartNew(() =>
{
List<Num> inputs = recorder.ToList().Result; List<Num> inputs = recorder.ToList().Result;
long sum = 0; long sum = 0;
@ -104,7 +104,7 @@ namespace math
static IEnumerable<Num> FibInternal(long n) static IEnumerable<Num> FibInternal(long n)
{ {
long a = 1; long a = 1;
yield return new Num.Builder { Num_=a }.Build(); yield return new Num.Builder { Num_ = a }.Build();
long b = 1; long b = 1;
for (long i = 0; i < n - 1; i++) for (long i = 0; i < n - 1; i++)
@ -112,12 +112,12 @@ namespace math
long temp = a; long temp = a;
a = b; a = b;
b = temp + 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; readonly IObserver<DivReply> responseObserver;
public DivObserver(IObserver<DivReply> responseObserver) public DivObserver(IObserver<DivReply> responseObserver)
@ -142,4 +142,3 @@ namespace math
} }
} }
} }

@ -1,22 +1,12 @@
using System.Reflection; using System.Reflection;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes. [assembly: AssemblyTitle("Grpc.Examples")]
// Change them to the values specific to your project. [assembly: AssemblyDescription("")]
[assembly: AssemblyTitle ("Grpc.Examples")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyDescription ("")] [assembly: AssemblyCompany("")]
[assembly: AssemblyConfiguration ("")] [assembly: AssemblyProduct("")]
[assembly: AssemblyCompany ("")] [assembly: AssemblyCopyright("Google Inc. All rights reserved.")]
[assembly: AssemblyProduct ("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyCopyright ("Google Inc. All rights reserved.")] [assembly: AssemblyCulture("")]
[assembly: AssemblyTrademark ("")] [assembly: AssemblyVersion("0.1.*")]
[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.Reflection;
using System.Runtime.CompilerServices; 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: AssemblyTitle("Grpc.IntegrationTesting.Client")]
[assembly: AssemblyDescription("")] [assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
@ -11,12 +9,4 @@ using System.Runtime.CompilerServices;
[assembly: AssemblyCopyright("Google Inc. All rights reserved.")] [assembly: AssemblyCopyright("Google Inc. All rights reserved.")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")] [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.*")] [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.Reflection;
using System.Runtime.CompilerServices; 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: AssemblyTitle("Grpc.IntegrationTesting.Server")]
[assembly: AssemblyDescription("")] [assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
@ -11,12 +9,4 @@ using System.Runtime.CompilerServices;
[assembly: AssemblyCopyright("Google Inc. All rights reserved.")] [assembly: AssemblyCopyright("Google Inc. All rights reserved.")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")] [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.*")] [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.Text.RegularExpressions;
using System.Threading.Tasks; using System.Threading.Tasks;
using Google.ProtocolBuffers; using Google.ProtocolBuffers;
using grpc.testing;
using Grpc.Core; using Grpc.Core;
using Grpc.Core.Utils; using Grpc.Core.Utils;
using NUnit.Framework; using NUnit.Framework;
using grpc.testing;
namespace Grpc.IntegrationTesting namespace Grpc.IntegrationTesting
{ {
@ -50,7 +50,7 @@ namespace Grpc.IntegrationTesting
private class ClientOptions private class ClientOptions
{ {
public bool help; public bool help;
public string serverHost= "127.0.0.1"; public string serverHost = "127.0.0.1";
public string serverHostOverride = TestCredentials.DefaultHostOverride; public string serverHostOverride = TestCredentials.DefaultHostOverride;
public int? serverPort; public int? serverPort;
public string testCase = "large_unary"; public string testCase = "large_unary";
@ -180,7 +180,7 @@ namespace Grpc.IntegrationTesting
{ {
Console.WriteLine("running client_streaming"); 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(); var context = client.StreamingInputCall();
foreach (var size in bodySizes) foreach (var size in bodySizes)
@ -199,7 +199,7 @@ namespace Grpc.IntegrationTesting
{ {
Console.WriteLine("running server_streaming"); 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() var request = StreamingOutputCallRequest.CreateBuilder()
.SetResponseType(PayloadType.COMPRESSABLE) .SetResponseType(PayloadType.COMPRESSABLE)
@ -256,7 +256,6 @@ namespace Grpc.IntegrationTesting
Assert.AreEqual(PayloadType.COMPRESSABLE, response.Payload.Type); Assert.AreEqual(PayloadType.COMPRESSABLE, response.Payload.Type);
Assert.AreEqual(2653, response.Payload.Body.Length); Assert.AreEqual(2653, response.Payload.Body.Length);
inputs.OnNext(StreamingOutputCallRequest.CreateBuilder() inputs.OnNext(StreamingOutputCallRequest.CreateBuilder()
.SetResponseType(PayloadType.COMPRESSABLE) .SetResponseType(PayloadType.COMPRESSABLE)
.AddResponseParameters(ResponseParameters.CreateBuilder().SetSize(58979)) .AddResponseParameters(ResponseParameters.CreateBuilder().SetSize(58979))
@ -292,17 +291,18 @@ namespace Grpc.IntegrationTesting
public static void RunBenchmarkEmptyUnary(TestServiceGrpc.ITestServiceClient client) public static void RunBenchmarkEmptyUnary(TestServiceGrpc.ITestServiceClient client)
{ {
BenchmarkUtil.RunBenchmark(10000, 10000, 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(); return Payload.CreateBuilder().SetBody(ByteString.CopyFrom(new byte[size])).Build();
} }
private static ClientOptions ParseArguments(string[] args) private static ClientOptions ParseArguments(string[] args)
{ {
var options = new ClientOptions(); var options = new ClientOptions();
foreach(string arg in args) foreach (string arg in args)
{ {
ParseArgument(arg, options); ParseArgument(arg, options);
if (options.help) if (options.help)

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

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

@ -1,8 +1,6 @@
using System.Reflection; using System.Reflection;
using System.Runtime.CompilerServices; 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: AssemblyTitle("Grpc.IntegrationTesting")]
[assembly: AssemblyDescription("")] [assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
@ -11,12 +9,4 @@ using System.Runtime.CompilerServices;
[assembly: AssemblyCopyright("Google Inc. All rights reserved.")] [assembly: AssemblyCopyright("Google Inc. All rights reserved.")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")] [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.*")] [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.Text.RegularExpressions;
using System.Threading.Tasks; using System.Threading.Tasks;
using Google.ProtocolBuffers; using Google.ProtocolBuffers;
using grpc.testing;
using Grpc.Core; using Grpc.Core;
using Grpc.Core.Utils; using Grpc.Core.Utils;
using NUnit.Framework; using NUnit.Framework;
using grpc.testing;
namespace Grpc.IntegrationTesting namespace Grpc.IntegrationTesting
{ {
@ -77,7 +77,7 @@ namespace Grpc.IntegrationTesting
var keyCertPair = new KeyCertificatePair( var keyCertPair = new KeyCertificatePair(
File.ReadAllText(ServerCertChainPath), File.ReadAllText(ServerCertChainPath),
File.ReadAllText(ServerPrivateKeyPath)); 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() var response = SimpleResponse.CreateBuilder()
.SetPayload(CreateZerosPayload(request.ResponseSize)).Build(); .SetPayload(CreateZerosPayload(request.ResponseSize)).Build();
//TODO: check we support ReponseType // TODO: check we support ReponseType
responseObserver.OnNext(response); responseObserver.OnNext(response);
responseObserver.OnCompleted(); responseObserver.OnCompleted();
} }
public void StreamingOutputCall(StreamingOutputCallRequest request, IObserver<StreamingOutputCallResponse> responseObserver) public void StreamingOutputCall(StreamingOutputCallRequest request, IObserver<StreamingOutputCallResponse> responseObserver)
{ {
foreach(var responseParam in request.ResponseParametersList) foreach (var responseParam in request.ResponseParametersList)
{ {
var response = StreamingOutputCallResponse.CreateBuilder() var response = StreamingOutputCallResponse.CreateBuilder()
.SetPayload(CreateZerosPayload(responseParam.Size)).Build(); .SetPayload(CreateZerosPayload(responseParam.Size)).Build();
@ -74,9 +74,10 @@ namespace grpc.testing
public IObserver<StreamingInputCallRequest> StreamingInputCall(IObserver<StreamingInputCallResponse> responseObserver) public IObserver<StreamingInputCallRequest> StreamingInputCall(IObserver<StreamingInputCallResponse> responseObserver)
{ {
var recorder = new RecordingObserver<StreamingInputCallRequest>(); var recorder = new RecordingObserver<StreamingInputCallRequest>();
Task.Run(() => { Task.Run(() =>
{
int sum = 0; int sum = 0;
foreach(var req in recorder.ToList().Result) foreach (var req in recorder.ToList().Result)
{ {
sum += req.Payload.Body.Length; sum += req.Payload.Body.Length;
} }
@ -98,8 +99,8 @@ namespace grpc.testing
throw new NotImplementedException(); throw new NotImplementedException();
} }
private class FullDuplexObserver : IObserver<StreamingOutputCallRequest> { private class FullDuplexObserver : IObserver<StreamingOutputCallRequest>
{
readonly IObserver<StreamingOutputCallResponse> responseObserver; readonly IObserver<StreamingOutputCallResponse> responseObserver;
public FullDuplexObserver(IObserver<StreamingOutputCallResponse> responseObserver) public FullDuplexObserver(IObserver<StreamingOutputCallResponse> responseObserver)
@ -119,22 +120,18 @@ namespace grpc.testing
public void OnNext(StreamingOutputCallRequest value) public void OnNext(StreamingOutputCallRequest value)
{ {
// TODO: this is not in order!!! foreach (var responseParam in value.ResponseParametersList)
//Task.Factory.StartNew(() => { {
var response = StreamingOutputCallResponse.CreateBuilder()
foreach(var responseParam in value.ResponseParametersList) .SetPayload(CreateZerosPayload(responseParam.Size)).Build();
{ responseObserver.OnNext(response);
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(); return Payload.CreateBuilder().SetBody(ByteString.CopyFrom(new byte[size])).Build();
} }
} }
} }

Loading…
Cancel
Save