43 lines
755 B
Go
43 lines
755 B
Go
package peer
|
|
|
|
import (
|
|
"log"
|
|
"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 {
|
|
r.mediatorIP.Store(nil)
|
|
} else {
|
|
ip = mediators[rand.Intn(len(mediators))].PeerIP
|
|
log.Printf("Got mediator IP: %d", ip)
|
|
r.mediatorIP.Store(&ip)
|
|
}
|
|
}
|
|
}
|