(sd *ServiceDesc, ss any)
| 779 | } |
| 780 | |
| 781 | func (s *Server) register(sd *ServiceDesc, ss any) { |
| 782 | s.mu.Lock() |
| 783 | defer s.mu.Unlock() |
| 784 | s.printf("RegisterService(%q)", sd.ServiceName) |
| 785 | if s.serve { |
| 786 | logger.Fatalf("grpc: Server.RegisterService after Server.Serve for %q", sd.ServiceName) |
| 787 | } |
| 788 | if _, ok := s.services[sd.ServiceName]; ok { |
| 789 | logger.Fatalf("grpc: Server.RegisterService found duplicate service registration for %q", sd.ServiceName) |
| 790 | } |
| 791 | info := &serviceInfo{ |
| 792 | serviceImpl: ss, |
| 793 | methods: make(map[string]*MethodDesc), |
| 794 | streams: make(map[string]*StreamDesc), |
| 795 | mdata: sd.Metadata, |
| 796 | } |
| 797 | for i := range sd.Methods { |
| 798 | d := &sd.Methods[i] |
| 799 | info.methods[d.MethodName] = d |
| 800 | } |
| 801 | for i := range sd.Streams { |
| 802 | d := &sd.Streams[i] |
| 803 | info.streams[d.StreamName] = d |
| 804 | } |
| 805 | s.services[sd.ServiceName] = info |
| 806 | } |
| 807 | |
| 808 | // MethodInfo contains the information of an RPC including its method name and type. |
| 809 | type MethodInfo struct { |
no test coverage detected