@@ -32,7 +32,7 @@ type Service interface {
3232// ServiceInfoWithGeneric create a generic ServiceInfo
3333func ServiceInfoWithGeneric (g Generic ) * serviceinfo.ServiceInfo {
3434 isCombinedServices := getIsCombinedServices (g )
35- return newServiceInfo (g . PayloadCodecType (), g . MessageReaderWriter (), g . IDLServiceName () , isCombinedServices )
35+ return newServiceInfo (g , isCombinedServices )
3636}
3737
3838func getIsCombinedServices (g Generic ) bool {
@@ -44,16 +44,16 @@ func getIsCombinedServices(g Generic) bool {
4444 return false
4545}
4646
47- func newServiceInfo (pcType serviceinfo. PayloadCodec , messageReaderWriter interface {}, serviceName string , isCombinedServices bool ) * serviceinfo.ServiceInfo {
47+ func newServiceInfo (g Generic , isCombinedServices bool ) * serviceinfo.ServiceInfo {
4848 handlerType := (* Service )(nil )
4949
50- methods , svcName := GetMethodInfo ( messageReaderWriter , serviceName )
50+ methods , svcName := getMethodInfo ( g , g . IDLServiceName () )
5151
5252 svcInfo := & serviceinfo.ServiceInfo {
5353 ServiceName : svcName ,
5454 HandlerType : handlerType ,
5555 Methods : methods ,
56- PayloadCodec : pcType ,
56+ PayloadCodec : g . PayloadCodecType () ,
5757 Extra : make (map [string ]interface {}),
5858 }
5959 svcInfo .Extra ["generic" ] = true
@@ -63,7 +63,37 @@ func newServiceInfo(pcType serviceinfo.PayloadCodec, messageReaderWriter interfa
6363 return svcInfo
6464}
6565
66- // GetMethodInfo is only used in kitex, please DON'T USE IT. This method may be removed in the future
66+ func getMethodInfo (g Generic , serviceName string ) (methods map [string ]serviceinfo.MethodInfo , svcName string ) {
67+ if g .PayloadCodec () != nil {
68+ // note: binary generic cannot be used with multi-service feature
69+ svcName = serviceinfo .GenericService
70+ methods = map [string ]serviceinfo.MethodInfo {
71+ serviceinfo .GenericMethod : serviceinfo .NewMethodInfo (callHandler , newGenericServiceCallArgs , newGenericServiceCallResult , false ),
72+ }
73+ } else {
74+ svcName = serviceName
75+ methods = map [string ]serviceinfo.MethodInfo {
76+ serviceinfo .GenericMethod : serviceinfo .NewMethodInfo (
77+ callHandler ,
78+ func () interface {} {
79+ args := & Args {}
80+ args .SetCodec (g .MessageReaderWriter ())
81+ return args
82+ },
83+ func () interface {} {
84+ result := & Result {}
85+ result .SetCodec (g .MessageReaderWriter ())
86+ return result
87+ },
88+ false ,
89+ ),
90+ }
91+ }
92+ return
93+ }
94+
95+ // GetMethodInfo is only used in kitex, please DON'T USE IT.
96+ // DEPRECATED: this method is no longer used. This method will be removed in the future
6797func GetMethodInfo (messageReaderWriter interface {}, serviceName string ) (methods map [string ]serviceinfo.MethodInfo , svcName string ) {
6898 if messageReaderWriter == nil {
6999 // note: binary generic cannot be used with multi-service feature
0 commit comments