Skip to content

Commit

Permalink
use alternate interface; change signature of Register
Browse files Browse the repository at this point in the history
  • Loading branch information
jhump committed Apr 23, 2021
1 parent 80bfb8a commit 77b94ac
Showing 1 changed file with 15 additions and 19 deletions.
34 changes: 15 additions & 19 deletions reflection/serverreflection.go
Expand Up @@ -54,33 +54,29 @@ import (
"google.golang.org/grpc/status"
)

// GRPCServer is the interface provided by a gRPC server. It is implemented by
// *grpc.Server, but could also be implemented by other concrete types. It acts
// as a registry, for accumulating the services exposed by the server.
type GRPCServer interface {
grpc.ServiceRegistrar
GetServiceInfo() map[string]grpc.ServiceInfo
}

var _ GRPCServer = (*grpc.Server)(nil)

type serverReflectionServer struct {
rpb.UnimplementedServerReflectionServer
queryServices func() map[string]grpc.ServiceInfo
s GRPCServer

initSymbols sync.Once
serviceNames []string
symbols map[string]*dpb.FileDescriptorProto // map of fully-qualified names to files
}

// Register registers the server reflection service on the given gRPC server.
func Register(s *grpc.Server) {
register(s, s.GetServiceInfo)
}

// RegisterWithRegistrar registers the server reflection service with the given registrar.
// The given map describes the services that will be exposed via reflection.
func RegisterWithRegistrar(r grpc.ServiceRegistrar, svcs map[string]grpc.ServiceInfo) {
rpb.RegisterServerReflectionServer(r, &serverReflectionServer{
queryServices: func() map[string]grpc.ServiceInfo {
return svcs
},
})
}

func register(r grpc.ServiceRegistrar, queryServices func() map[string]grpc.ServiceInfo) {
rpb.RegisterServerReflectionServer(r, &serverReflectionServer{
queryServices: queryServices,
func Register(s GRPCServer) {
rpb.RegisterServerReflectionServer(s, &serverReflectionServer{
s: s,
})
}

Expand All @@ -94,7 +90,7 @@ type protoMessage interface {

func (s *serverReflectionServer) getSymbols() (svcNames []string, symbolIndex map[string]*dpb.FileDescriptorProto) {
s.initSymbols.Do(func() {
serviceInfo := s.queryServices()
serviceInfo := s.s.GetServiceInfo()

s.symbols = map[string]*dpb.FileDescriptorProto{}
s.serviceNames = make([]string, 0, len(serviceInfo))
Expand Down

0 comments on commit 77b94ac

Please sign in to comment.