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