42 lines
737 B
Go
42 lines
737 B
Go
package node
|
|
|
|
import (
|
|
"log"
|
|
"math/rand"
|
|
"time"
|
|
)
|
|
|
|
// TODO: Make part of main loop on ping timer
|
|
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)
|
|
}
|