| 
					
				 | 
			
			
				@@ -45,6 +45,8 @@ namespace Grpc.Core.Internal 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     internal class UnaryServerCallHandler<TRequest, TResponse> : IServerCallHandler 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        where TRequest : class 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        where TResponse : class 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         readonly Method<TRequest, TResponse> method; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         readonly UnaryServerMethod<TRequest, TResponse> handler; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -72,7 +74,8 @@ namespace Grpc.Core.Internal 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var request = await requestStream.ReadNext(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // TODO(jtattermusch): we need to read the full stream so that native callhandle gets deallocated. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Preconditions.CheckArgument(await requestStream.ReadNext() == null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                var result = await handler(request); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var context = new ServerCallContext();  // TODO(jtattermusch): initialize the context 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var result = await handler(context, request); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 await responseStream.Write(result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             catch (Exception e) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -93,6 +96,8 @@ namespace Grpc.Core.Internal 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     internal class ServerStreamingServerCallHandler<TRequest, TResponse> : IServerCallHandler 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        where TRequest : class 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        where TResponse : class 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         readonly Method<TRequest, TResponse> method; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         readonly ServerStreamingServerMethod<TRequest, TResponse> handler; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -121,7 +126,8 @@ namespace Grpc.Core.Internal 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // TODO(jtattermusch): we need to read the full stream so that native callhandle gets deallocated. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Preconditions.CheckArgument(await requestStream.ReadNext() == null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                await handler(request, responseStream); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var context = new ServerCallContext();  // TODO(jtattermusch): initialize the context 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                await handler(context, request, responseStream); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             catch (Exception e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -142,6 +148,8 @@ namespace Grpc.Core.Internal 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     internal class ClientStreamingServerCallHandler<TRequest, TResponse> : IServerCallHandler 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        where TRequest : class 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        where TResponse : class 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         readonly Method<TRequest, TResponse> method; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         readonly ClientStreamingServerMethod<TRequest, TResponse> handler; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -162,11 +170,12 @@ namespace Grpc.Core.Internal 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             var finishedTask = asyncCall.ServerSideCallAsync(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             var requestStream = new ServerRequestStream<TRequest, TResponse>(asyncCall); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             var responseStream = new ServerResponseStream<TRequest, TResponse>(asyncCall); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var context = new ServerCallContext();  // TODO(jtattermusch): initialize the context 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Status status = Status.DefaultSuccess; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             try 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                var result = await handler(requestStream); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var result = await handler(context, requestStream); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 try 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     await responseStream.Write(result); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -195,6 +204,8 @@ namespace Grpc.Core.Internal 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     internal class DuplexStreamingServerCallHandler<TRequest, TResponse> : IServerCallHandler 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        where TRequest : class 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        where TResponse : class 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         readonly Method<TRequest, TResponse> method; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         readonly DuplexStreamingServerMethod<TRequest, TResponse> handler; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -215,11 +226,12 @@ namespace Grpc.Core.Internal 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             var finishedTask = asyncCall.ServerSideCallAsync(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             var requestStream = new ServerRequestStream<TRequest, TResponse>(asyncCall); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             var responseStream = new ServerResponseStream<TRequest, TResponse>(asyncCall); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var context = new ServerCallContext();  // TODO(jtattermusch): initialize the context 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Status status = Status.DefaultSuccess; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             try 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                await handler(requestStream, responseStream); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                await handler(context, requestStream, responseStream); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             catch (Exception e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             { 
			 |