42 lines
718 B
Go
42 lines
718 B
Go
|
package invoke
|
||
|
|
||
|
import (
|
||
|
"sync"
|
||
|
|
||
|
"google.golang.org/grpc/resolver"
|
||
|
)
|
||
|
|
||
|
type Builder struct{}
|
||
|
|
||
|
func (b *Builder) Scheme() string {
|
||
|
return SCHEME
|
||
|
}
|
||
|
|
||
|
func (b *Builder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOptions) (resolver.Resolver, error) {
|
||
|
cr := &Resolver{
|
||
|
cc: cc,
|
||
|
target: target,
|
||
|
}
|
||
|
|
||
|
cr.ResolveNow(resolver.ResolveNowOptions{})
|
||
|
|
||
|
return cr, nil
|
||
|
}
|
||
|
|
||
|
type Resolver struct {
|
||
|
target resolver.Target
|
||
|
cc resolver.ClientConn
|
||
|
}
|
||
|
|
||
|
func (r *Resolver) ResolveNow(o resolver.ResolveNowOptions) {
|
||
|
_ = r.cc.UpdateState(ips[r.target.URL.Host])
|
||
|
}
|
||
|
|
||
|
func (cr *Resolver) Close() {}
|
||
|
|
||
|
var (
|
||
|
locker = &sync.Mutex{}
|
||
|
myBuilder = &Builder{}
|
||
|
ips = map[string]resolver.State{}
|
||
|
)
|