add path option for hop
This commit is contained in:
21
hop/hop.go
21
hop/hop.go
@ -6,6 +6,7 @@ import (
|
||||
"encoding/json"
|
||||
"io"
|
||||
"net"
|
||||
"sort"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
@ -179,6 +180,26 @@ func (p *chainHop) Select(ctx context.Context, opts ...hop.SelectOption) *chain.
|
||||
}
|
||||
}
|
||||
|
||||
// filter by path
|
||||
if path := options.Path; path != "" {
|
||||
p.options.logger.Debugf("filter by path: %s", path)
|
||||
sort.SliceStable(filters, func(i, j int) bool {
|
||||
return len(filters[i].Options().Path) > len(filters[j].Options().Path)
|
||||
})
|
||||
var nodes []*chain.Node
|
||||
for _, node := range filters {
|
||||
if node.Options().Path == "" {
|
||||
nodes = append(nodes, node)
|
||||
continue
|
||||
}
|
||||
if strings.HasPrefix(path, node.Options().Path) {
|
||||
nodes = append(nodes, node)
|
||||
break
|
||||
}
|
||||
}
|
||||
filters = nodes
|
||||
}
|
||||
|
||||
var nodes []*chain.Node
|
||||
for _, node := range filters {
|
||||
if node == nil {
|
||||
|
Reference in New Issue
Block a user