add the sanity check back and refactor
This commit is contained in:
11
server.go
11
server.go
@ -38,6 +38,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net"
|
"net"
|
||||||
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
@ -138,9 +139,17 @@ func NewServer(opt ...ServerOption) *Server {
|
|||||||
// server. Called from the IDL generated code. This must be called before
|
// server. Called from the IDL generated code. This must be called before
|
||||||
// invoking Serve.
|
// invoking Serve.
|
||||||
func (s *Server) RegisterService(sd *ServiceDesc, ss interface{}) {
|
func (s *Server) RegisterService(sd *ServiceDesc, ss interface{}) {
|
||||||
|
ht := reflect.TypeOf(sd.HandlerType).Elem()
|
||||||
|
st := reflect.TypeOf(ss)
|
||||||
|
if !st.Implements(ht) {
|
||||||
|
grpclog.Fatalf("grpc: Server.RegisterService found the handler of type %v that does not satisfy %v", st, ht)
|
||||||
|
}
|
||||||
|
s.register(sd, ss)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Server) register(sd *ServiceDesc, ss interface{}) {
|
||||||
s.mu.Lock()
|
s.mu.Lock()
|
||||||
defer s.mu.Unlock()
|
defer s.mu.Unlock()
|
||||||
// Does some sanity checks.
|
|
||||||
if _, ok := s.m[sd.ServiceName]; ok {
|
if _, ok := s.m[sd.ServiceName]; ok {
|
||||||
grpclog.Fatalf("grpc: Server.RegisterService found duplicate service registration for %q", sd.ServiceName)
|
grpclog.Fatalf("grpc: Server.RegisterService found duplicate service registration for %q", sd.ServiceName)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user