package rpcx import ( "zero/core/discov" "zero/core/service" "zero/core/stores/redis" ) type ( RpcServerConf struct { service.ServiceConf ListenOn string Etcd discov.EtcdConf `json:",optional"` Auth bool `json:",optional"` Redis redis.RedisKeyConf `json:",optional"` StrictControl bool `json:",optional"` // pending forever is not allowed // never set it to 0, if zero, the underlying will set to 2s automatically Timeout int64 `json:",default=2000"` CpuThreshold int64 `json:",default=900,range=[0:1000]"` } RpcClientConf struct { Etcd discov.EtcdConf `json:",optional"` Server string `json:",optional=!Etcd"` App string `json:",optional"` Token string `json:",optional"` Timeout int64 `json:",optional"` } ) func NewDirectClientConf(server, app, token string) RpcClientConf { return RpcClientConf{ Server: server, App: app, Token: token, } } func NewEtcdClientConf(hosts []string, key, app, token string) RpcClientConf { return RpcClientConf{ Etcd: discov.EtcdConf{ Hosts: hosts, Key: key, }, App: app, Token: token, } } func (sc RpcServerConf) HasEtcd() bool { return len(sc.Etcd.Hosts) > 0 && len(sc.Etcd.Key) > 0 } func (sc RpcServerConf) Validate() error { if sc.Auth { if err := sc.Redis.Validate(); err != nil { return err } } return nil } func (cc RpcClientConf) HasCredential() bool { return len(cc.App) > 0 && len(cc.Token) > 0 }