35 lines
794 B
Go
35 lines
794 B
Go
package discovery
|
|
|
|
// DiscoverySet a slice of initialized discovery services.
|
|
//
|
|
//goland:noinspection GoNameStartsWithPackageName
|
|
type DiscoverySet []*Discovery
|
|
|
|
// NewNodes returns channel with newly discovered node ips.
|
|
func (d DiscoverySet) NewNodes() NewNodes {
|
|
res := make(chan string, 20)
|
|
|
|
for _, discovery := range d {
|
|
go func(discovery *Discovery) {
|
|
for node := range discovery.NewNodes() {
|
|
if len(res) == cap(res) {
|
|
panic("knownNodes from discovery set not reading!")
|
|
}
|
|
|
|
res <- node
|
|
}
|
|
}(discovery)
|
|
}
|
|
|
|
return res
|
|
}
|
|
|
|
// FailNodes accept a channel with ip of nodes, that was failed (lost or canceled connection).
|
|
func (d DiscoverySet) FailNodes(ch chan string) {
|
|
for addr := range ch {
|
|
for _, discovery := range d {
|
|
discovery.FailNode(addr)
|
|
}
|
|
}
|
|
}
|