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) } } }