gitee.com/h79/goutils@v1.22.10/discovery/local/client.go (about) 1 package local 2 3 import ( 4 "gitee.com/h79/goutils/common/logger" 5 "gitee.com/h79/goutils/common/server" 6 "gitee.com/h79/goutils/discovery/config" 7 "gitee.com/h79/goutils/discovery/errors" 8 "gitee.com/h79/goutils/discovery/resolver" 9 "gitee.com/h79/goutils/discovery/resolver/builder" 10 "gitee.com/h79/goutils/discovery/service" 11 ) 12 13 var _ service.Client = (*defClient)(nil) 14 var _ builder.Builder = (*defClient)(nil) 15 16 type defClient struct { 17 node config.Node 18 server server.Address 19 endPoints config.EndPoints 20 resolver resolver.Resolver 21 } 22 23 func NewDefaultClient(conf config.Config, points config.EndPoints, resol resolver.Resolver) (service.Client, error) { 24 25 build := &defClient{ 26 node: conf.Node, 27 server: conf.Server, 28 endPoints: points, 29 resolver: resol, 30 } 31 resolver.Register(build) 32 return build, nil 33 } 34 35 func (cli *defClient) Start() error { 36 return nil 37 } 38 39 func (cli *defClient) Stop() { 40 } 41 42 // Set service.Config interface 43 func (cli *defClient) Set(data service.Data) error { 44 return errors.ErrNotSupported 45 } 46 47 // Get service.Config interface 48 func (cli *defClient) Get(key service.Key) ([]*service.Data, error) { 49 return nil, errors.ErrNotSupported 50 } 51 52 // Resolve service.Client and resolver.Builder interface 53 func (cli *defClient) Resolve(target builder.Target) []builder.Address { 54 if cli.resolver != nil { 55 return cli.resolver.Resolve(target) 56 } 57 return cli.defResolve(target) 58 } 59 60 func (cli *defClient) defResolve(target builder.Target) []builder.Address { 61 var adders []builder.Address 62 var addFn = func(a server.Address) { 63 if !a.IsValid() { 64 return 65 } 66 s := server.Address{ 67 Scheme: a.Scheme, 68 Host: a.Host, 69 Port: a.Port, 70 } 71 s.Adjust() 72 address := builder.Address{Addr: s.To(), ServerName: target.SchemeWith("")} 73 adders = append(adders, address) 74 } 75 for i := range cli.endPoints.Servers { 76 addFn(cli.endPoints.Servers[i]) 77 } 78 addFn(cli.server) 79 return adders 80 } 81 82 // Build 83 // builder.Builder interface 84 func (cli *defClient) Build(target builder.Target, cc builder.Connector) (builder.Resolver, error) { 85 86 logger.Info("def.Client: Build target: %+v", target) 87 88 cr := resolver.NewResolver(target, cc, cli) 89 90 return cr, nil 91 } 92 93 // Scheme 94 // builder.Builder interface 95 func (cli *defClient) Scheme() string { 96 return cli.node.Scheme 97 } 98 99 // Type 100 // builder.Builder interface 101 func (cli *defClient) Type() string { 102 return cli.node.Type 103 }