1
0

directbuilder.go 827 B

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