Skip to content

Commit

Permalink
fix: message reader writer
Browse files Browse the repository at this point in the history
  • Loading branch information
Marina-Sakai committed Jan 21, 2025
1 parent 25d7454 commit fcb001a
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 17 deletions.
3 changes: 0 additions & 3 deletions client/genericclient/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,6 @@ func (gc *genericServiceClient) GenericCall(ctx context.Context, method string,
ctx = client.NewCtxWithCallOptions(ctx, callOptions)
mtInfo := gc.svcInfo.MethodInfo(method)
_args := mtInfo.NewArgs().(*generic.Args)
codec := gc.g.MessageReaderWriter()
_args.SetCodec(codec)
_args.Method = method
_args.Request = request

Expand All @@ -110,7 +108,6 @@ func (gc *genericServiceClient) GenericCall(ctx context.Context, method string,
}

_result := mtInfo.NewResult().(*generic.Result)
_result.SetCodec(codec)
if err = gc.kClient.Call(ctx, mt.Name, _args, _result); err != nil {
return
}
Expand Down
19 changes: 9 additions & 10 deletions client/genericclient/generic_stream_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,7 @@ func StreamingServiceInfo(g generic.Generic) *serviceinfo.ServiceInfo {
}

func newClientStreamingServiceInfo(g generic.Generic) *serviceinfo.ServiceInfo {
readerWriter := g.MessageReaderWriter()
if readerWriter == nil {
if g.MessageReaderWriter() == nil {
// TODO: support grpc binary generic
panic("binary generic streaming is not supported")
}
Expand All @@ -37,12 +36,12 @@ func newClientStreamingServiceInfo(g generic.Generic) *serviceinfo.ServiceInfo {
nil,
func() interface{} {
args := &generic.Args{}
args.SetCodec(readerWriter)
args.SetCodec(g.MessageReaderWriter())
return args
},
func() interface{} {
result := &generic.Result{}
result.SetCodec(readerWriter)
result.SetCodec(g.MessageReaderWriter())
return result
},
false,
Expand All @@ -52,12 +51,12 @@ func newClientStreamingServiceInfo(g generic.Generic) *serviceinfo.ServiceInfo {
nil,
func() interface{} {
args := &generic.Args{}
args.SetCodec(readerWriter)
args.SetCodec(g.MessageReaderWriter())
return args
},
func() interface{} {
result := &generic.Result{}
result.SetCodec(readerWriter)
result.SetCodec(g.MessageReaderWriter())
return result
},
false,
Expand All @@ -67,12 +66,12 @@ func newClientStreamingServiceInfo(g generic.Generic) *serviceinfo.ServiceInfo {
nil,
func() interface{} {
args := &generic.Args{}
args.SetCodec(readerWriter)
args.SetCodec(g.MessageReaderWriter())
return args
},
func() interface{} {
result := &generic.Result{}
result.SetCodec(readerWriter)
result.SetCodec(g.MessageReaderWriter())
return result
},
false,
Expand All @@ -82,12 +81,12 @@ func newClientStreamingServiceInfo(g generic.Generic) *serviceinfo.ServiceInfo {
nil,
func() interface{} {
args := &generic.Args{}
args.SetCodec(readerWriter)
args.SetCodec(g.MessageReaderWriter())
return args
},
func() interface{} {
result := &generic.Result{}
result.SetCodec(readerWriter)
result.SetCodec(g.MessageReaderWriter())
return result
},
false,
Expand Down
39 changes: 35 additions & 4 deletions pkg/generic/generic_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ type Service interface {
// ServiceInfoWithGeneric create a generic ServiceInfo
func ServiceInfoWithGeneric(g Generic) *serviceinfo.ServiceInfo {
isCombinedServices := getIsCombinedServices(g)
return newServiceInfo(g.PayloadCodecType(), g.MessageReaderWriter(), g.IDLServiceName(), isCombinedServices)
return newServiceInfo(g, isCombinedServices)
}

func getIsCombinedServices(g Generic) bool {
Expand All @@ -44,16 +44,16 @@ func getIsCombinedServices(g Generic) bool {
return false
}

func newServiceInfo(pcType serviceinfo.PayloadCodec, messageReaderWriter interface{}, serviceName string, isCombinedServices bool) *serviceinfo.ServiceInfo {
func newServiceInfo(g Generic, isCombinedServices bool) *serviceinfo.ServiceInfo {
handlerType := (*Service)(nil)

methods, svcName := GetMethodInfo(messageReaderWriter, serviceName)
methods, svcName := getMethodInfo(g, g.IDLServiceName())

svcInfo := &serviceinfo.ServiceInfo{
ServiceName: svcName,
HandlerType: handlerType,
Methods: methods,
PayloadCodec: pcType,
PayloadCodec: g.PayloadCodecType(),
Extra: make(map[string]interface{}),
}
svcInfo.Extra["generic"] = true
Expand All @@ -63,6 +63,36 @@ func newServiceInfo(pcType serviceinfo.PayloadCodec, messageReaderWriter interfa
return svcInfo
}

func getMethodInfo(g Generic, serviceName string) (methods map[string]serviceinfo.MethodInfo, svcName string) {
if g.MessageReaderWriter() == nil {
// note: binary generic cannot be used with multi-service feature
svcName = serviceinfo.GenericService
methods = map[string]serviceinfo.MethodInfo{
serviceinfo.GenericMethod: serviceinfo.NewMethodInfo(callHandler, newGenericServiceCallArgs, newGenericServiceCallResult, false),
}
} else {
svcName = serviceName
methods = map[string]serviceinfo.MethodInfo{
serviceinfo.GenericMethod: serviceinfo.NewMethodInfo(
callHandler,
func() interface{} {
args := &Args{}
args.SetCodec(g.MessageReaderWriter())
return args
},
func() interface{} {
result := &Result{}
result.SetCodec(g.MessageReaderWriter())
return result
},
false,
),
}
}
return
}

/*
// GetMethodInfo is only used in kitex, please DON'T USE IT. This method may be removed in the future
func GetMethodInfo(messageReaderWriter interface{}, serviceName string) (methods map[string]serviceinfo.MethodInfo, svcName string) {
if messageReaderWriter == nil {
Expand Down Expand Up @@ -92,6 +122,7 @@ func GetMethodInfo(messageReaderWriter interface{}, serviceName string) (methods
}
return
}
*/

func callHandler(ctx context.Context, handler, arg, result interface{}) error {
realArg := arg.(*Args)
Expand Down

0 comments on commit fcb001a

Please sign in to comment.