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  }