github.com/lingyao2333/mo-zero@v1.4.1/zrpc/resolver/internal/directbuilder.go (about)

     1  package internal
     2  
     3  import (
     4  	"strings"
     5  
     6  	"github.com/lingyao2333/mo-zero/zrpc/resolver/internal/targets"
     7  	"google.golang.org/grpc/resolver"
     8  )
     9  
    10  type directBuilder struct{}
    11  
    12  func (d *directBuilder) Build(target resolver.Target, cc resolver.ClientConn, _ resolver.BuildOptions) (
    13  	resolver.Resolver, error) {
    14  	endpoints := strings.FieldsFunc(targets.GetEndpoints(target), func(r rune) bool {
    15  		return r == EndpointSepChar
    16  	})
    17  	endpoints = subset(endpoints, subsetSize)
    18  	addrs := make([]resolver.Address, 0, len(endpoints))
    19  
    20  	for _, val := range endpoints {
    21  		addrs = append(addrs, resolver.Address{
    22  			Addr: val,
    23  		})
    24  	}
    25  	if err := cc.UpdateState(resolver.State{
    26  		Addresses: addrs,
    27  	}); err != nil {
    28  		return nil, err
    29  	}
    30  
    31  	return &nopResolver{cc: cc}, nil
    32  }
    33  
    34  func (d *directBuilder) Scheme() string {
    35  	return DirectScheme
    36  }