go_dreamfactory/lego/base/core.go

89 lines
4.2 KiB
Go

package base
import (
"context"
"time"
"go_dreamfactory/lego/core"
"github.com/smallnest/rpcx/client"
)
type Result struct {
Index string
Result interface{}
Err error
}
type ISingleService interface {
core.IService
}
type IClusterServiceBase interface {
core.IService
GetTag() string //获取集群标签
GetCategory() core.S_Category //服务类别 例如游戏服
GetRpcId() string //获取rpc通信id
GetPreWeight() float64 //集群服务负载值 暂时可以不用理会
SetPreWeight(weight int32) //设置服务器权重
}
type IClusterServiceSession interface {
GetId() string
GetIp() string
GetRpcId() string
GetType() string
GetVersion() string
SetVersion(v string)
GetPreWeight() float64
SetPreWeight(p float64)
Done()
CallNR(_func core.Rpc_Key, params ...interface{}) (err error)
Call(_func core.Rpc_Key, params ...interface{}) (interface{}, error)
}
type IClusterService interface {
IClusterServiceBase
GetSessionsByCategory(category core.S_Category) (ss []IClusterServiceSession) //按服务类别获取服务列表
DefauleRpcRouteRules(stype string, sip string) (ss IClusterServiceSession, err error) //默认rpc路由规则
RpcInvokeById(sId string, rkey core.Rpc_Key, iscall bool, arg ...interface{}) (result interface{}, err error)
RpcInvokeByIds(sId []string, rkey core.Rpc_Key, iscall bool, arg ...interface{}) (results map[string]*Result, err error) //执行远程服务Rpc方法
RpcInvokeByType(sType string, rkey core.Rpc_Key, iscall bool, arg ...interface{}) (result interface{}, err error) //根据路由规则执行远程方法
RpcInvokeByIp(sIp, sType string, rkey core.Rpc_Key, iscall bool, arg ...interface{}) (result interface{}, err error) //根据目标IP和类型执行远程方法
RpcInvokeByIps(sIp []string, sType string, rkey core.Rpc_Key, iscall bool, arg ...interface{}) (results map[string]*Result, err error) //根据目标IP集和类型执行远程方法
ReleaseRpc(rkey core.Rpc_Key, arg ...interface{}) //发布Rpc
Register(id core.Rpc_Key, f interface{}) //注册RPC远程方法
RegisterGO(id core.Rpc_Key, f interface{}) //注册RPC远程方法
//废弃此方法
Subscribe(id core.Rpc_Key, f interface{}) (err error) //订阅Rpc
UnSubscribe(id core.Rpc_Key, f interface{}) (err error) //订阅Rpc
}
type IRPCXServiceSession interface {
GetId() string
GetIp() string
GetRpcId() string
GetType() string
GetVersion() string
SetVersion(v string)
GetPreWeight() float64
SetPreWeight(p float64)
Done()
Call(ctx context.Context, serviceMethod string, args interface{}, reply interface{}) error
Go(ctx context.Context, serviceMethod string, args interface{}, reply interface{}) (*client.Call, error)
}
type IRPCXService interface {
IClusterServiceBase
GetOpentime() time.Time
RegisterFunction(fn interface{}) (err error)
RegisterFunctionName(name string, fn interface{}) (err error)
RpcCall(ctx context.Context, servicePath string, serviceMethod string, args interface{}, reply interface{}) (err error)
RpcBroadcast(ctx context.Context, servicePath string, serviceMethod string, args interface{}, reply interface{}) (err error)
RpcGo(ctx context.Context, servicePath string, serviceMethod string, args interface{}, reply interface{}) (call *client.Call, err error)
AcrossClusterRpcCall(ctx context.Context, clusterTag string, servicePath string, serviceMethod string, args interface{}, reply interface{}) (err error)
AcrossClusterRpcGo(ctx context.Context, clusterTag string, servicePath string, serviceMethod string, args interface{}, reply interface{}) (call *client.Call, err error)
AcrossClusterBroadcast(ctx context.Context, clusterTag string, servicePath string, serviceMethod string, args interface{}, reply interface{}) (err error)
ClusterBroadcast(ctx context.Context, servicePath string, serviceMethod string, args interface{}, reply interface{}) (err error)
}