vppn/peer/router-managemediator.go
2024-12-12 21:11:17 +01:00

46 lines
754 B
Go

package peer
import (
"math/rand"
"time"
)
func (r *Router) manageMediator() {
var (
ip = byte(0)
mediators = make([]*route, 0, 32)
)
for range time.Tick(8 * time.Second) {
// If the current mediator is up, keep it.
route := r.routes[ip].Load()
if route != nil && route.Up {
continue
}
// If the current mediator is up, keep it.
mediators = mediators[:0]
for i := range r.routes {
route := r.routes[i].Load()
if route == nil || !route.Mediator {
continue
}
mediators = append(mediators, route)
}
if len(mediators) == 0 {
ip = 0
} else {
ip = mediators[rand.Intn(len(mediators))].PeerIP
}
for _, conn := range r.conns {
if conn != nil {
conn.UpdateMediator(ip)
}
}
}
}