improve chain node bypass

This commit is contained in:
ginuerzh
2022-08-24 23:12:20 +08:00
parent ff51aef518
commit 81bf7b985a
2 changed files with 26 additions and 5 deletions

View File

@ -28,6 +28,7 @@ func (node *Node) Copy() *Node {
type NodeGroup struct {
nodes []*Node
selector Selector
bypass bypass.Bypass
}
func NewNodeGroup(nodes ...*Node) *NodeGroup {
@ -45,6 +46,25 @@ func (g *NodeGroup) WithSelector(selector Selector) *NodeGroup {
return g
}
func (g *NodeGroup) WithBypass(bypass bypass.Bypass) *NodeGroup {
g.bypass = bypass
return g
}
func (g *NodeGroup) filter(addr string) *NodeGroup {
var nodes []*Node
for _, node := range g.nodes {
if node.Bypass == nil || !node.Bypass.Contains(addr) {
nodes = append(nodes, node)
}
}
return &NodeGroup{
nodes: nodes,
selector: g.selector,
bypass: g.bypass,
}
}
func (g *NodeGroup) Next() *Node {
if g == nil || len(g.nodes) == 0 {
return nil