You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
1.5 KiB
80 lines
1.5 KiB
package http |
|
|
|
import ( |
|
"context" |
|
"errors" |
|
"git.diulo.com/mogfee/kit/registry" |
|
"git.diulo.com/mogfee/kit/selector" |
|
"net/url" |
|
"strings" |
|
) |
|
|
|
type Target struct { |
|
Scheme string |
|
Authority string |
|
Endpoint string |
|
} |
|
|
|
func parseTarget(endpoint string, insecure bool) (*Target, error) { |
|
if !strings.Contains(endpoint, "://") { |
|
if insecure { |
|
endpoint = "http://" + endpoint |
|
} else { |
|
endpoint = "https://" + endpoint |
|
} |
|
} |
|
u, err := url.Parse(endpoint) |
|
if err != nil { |
|
return nil, err |
|
} |
|
target := &Target{ |
|
Scheme: u.Scheme, |
|
Authority: u.Host, |
|
Endpoint: "", |
|
} |
|
if len(u.Path) > 1 { |
|
target.Endpoint = u.Path[1:] |
|
} |
|
return target, nil |
|
} |
|
|
|
type resolver struct { |
|
rebalancer selector.Rebalancer |
|
|
|
target *Target |
|
watcher registry.Watcher |
|
|
|
insecure bool |
|
} |
|
|
|
func newResolver(ctx context.Context, discovery registry.Discovery, target *Target, rebalancer selector.Rebalancer, block, insecure bool) (*resolver, error) { |
|
//watcher, err := discovery.Watch(ctx, target.Endpoint) |
|
//if err != nil { |
|
// return nil, err |
|
//} |
|
//r := &resolver{ |
|
// rebalancer: rebalancer, |
|
// target: target, |
|
// watcher: watcher, |
|
// insecure: insecure, |
|
//} |
|
//if block { |
|
// done := make(chan error, 1) |
|
// go func() { |
|
// for { |
|
// services, err := watcher.Next() |
|
// if err != nil { |
|
// done <- err |
|
// return |
|
// } |
|
// } |
|
// }() |
|
//} |
|
return nil, errors.New("un impl") |
|
} |
|
func (r *resolver) update() { |
|
|
|
} |
|
func (r *resolver) Close() error { |
|
return r.watcher.Stop() |
|
}
|
|
|