go_dreamfactory/lego/sys/rpcx/rpcx.go
2022-07-14 11:43:37 +08:00

82 lines
2.2 KiB
Go

package rpcx
import (
"context"
"github.com/smallnest/rpcx/client"
)
func newSys(options *Options) (sys ISys, err error) {
if options.RpcxStartType == RpcxStartByService { //创建RPCX 服务端
sys, err = newService(options)
return
}
if options.RpcxStartType == RpcxStartByClient { //创建RPCX 客户端
sys, err = newClient(options)
return
}
var (
service ISys
client ISys
)
service, err = newService(options)
client, err = newClient(options)
sys = &RPCX{
service: service,
client: client,
}
return
}
type RPCX struct {
service ISys
client ISys
}
func (this *RPCX) Start() (err error) {
this.service.Start()
this.client.Start()
return
}
func (this *RPCX) Stop() (err error) {
this.service.Stop()
this.client.Stop()
return
}
func (this *RPCX) RegisterFunction(fn interface{}) (err error) {
this.service.RegisterFunction(fn)
return
}
func (this *RPCX) RegisterFunctionName(name string, fn interface{}) (err error) {
this.service.RegisterFunctionName(name, fn)
return
}
func (this *RPCX) UnregisterAll() (err error) {
return this.service.UnregisterAll()
}
//同步调用
func (this *RPCX) Call(ctx context.Context, servicePath string, serviceMethod string, args interface{}, reply interface{}) (err error) {
return this.client.Call(ctx, servicePath, serviceMethod, args, reply)
}
//异步调用
func (this *RPCX) Go(ctx context.Context, servicePath string, serviceMethod string, args interface{}, reply interface{}, done chan *client.Call) (call *client.Call, err error) {
return this.client.Go(ctx, servicePath, serviceMethod, args, reply, done)
}
//跨服同步调用
func (this *RPCX) AcrossClusterCall(ctx context.Context, clusterTag string, servicePath string, serviceMethod string, args interface{}, reply interface{}) (err error) {
return this.client.AcrossClusterCall(ctx, clusterTag, servicePath, serviceMethod, args, reply)
}
//跨服异步调用
func (this *RPCX) AcrossClusterGo(ctx context.Context, clusterTag string, servicePath string, serviceMethod string, args interface{}, reply interface{}, done chan *client.Call) (call *client.Call, err error) {
return this.client.AcrossClusterGo(ctx, clusterTag, servicePath, serviceMethod, args, reply, done)
}