Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'internal/praefect/grpc-proxy/proxy/handler.go')
-rw-r--r--internal/praefect/grpc-proxy/proxy/handler.go28
1 files changed, 28 insertions, 0 deletions
diff --git a/internal/praefect/grpc-proxy/proxy/handler.go b/internal/praefect/grpc-proxy/proxy/handler.go
index ced9388b9..69012235e 100644
--- a/internal/praefect/grpc-proxy/proxy/handler.go
+++ b/internal/praefect/grpc-proxy/proxy/handler.go
@@ -24,6 +24,34 @@ var (
}
)
+// RegisterStreamHandlers sets up stream handlers for a set of gRPC methods for a given service.
+// streamers is a map of method to grpc.StreamHandler eg:
+//
+// streamHandler := func(srv interface{}, stream ServerStream) error {
+// /** do some stuff **/
+// return nil
+// }
+// RegisterStreamHandlers(grpcServer, "MyGrpcService", map[string]grpc.StreamHandler{"Method1": streamHandler})
+// note: multiple calls with the same serviceName will result in a fatal
+func RegisterStreamHandlers(server *grpc.Server, serviceName string, streamers map[string]grpc.StreamHandler) {
+ desc := &grpc.ServiceDesc{
+ ServiceName: serviceName,
+ HandlerType: (*interface{})(nil),
+ }
+
+ for methodName, streamer := range streamers {
+ streamDesc := grpc.StreamDesc{
+ StreamName: methodName,
+ Handler: streamer,
+ ServerStreams: true,
+ ClientStreams: true,
+ }
+ desc.Streams = append(desc.Streams, streamDesc)
+ }
+
+ server.RegisterService(desc, struct{}{})
+}
+
// RegisterService sets up a proxy handler for a particular gRPC service and method.
// The behaviour is the same as if you were registering a handler method, e.g. from a codegenerated pb.go file.
//