package node import ( "log" "math/rand" "time" ) func relayManager() { time.Sleep(2 * time.Second) updateRelayRoute() for range time.Tick(8 * time.Second) { relay := getRelayRoute() if relay == nil || !relay.Up || !relay.Relay { updateRelayRoute() } } } func updateRelayRoute() { possible := make([]*peerRoute, 0, 8) for i := range routingTable { route := routingTable[i].Load() if !route.Up || !route.Relay { continue } possible = append(possible, route) } if len(possible) == 0 { log.Printf("No relay available.") relayIP.Store(nil) return } ip := possible[rand.Intn(len(possible))].IP log.Printf("New relay IP: %d", ip) relayIP.Store(&ip) }