Move add peer loop into Core, refresh it from active config

This commit is contained in:
Neil Alexander 2019-01-14 17:21:15 +00:00
parent aed3c7e784
commit 87d393bd9f
No known key found for this signature in database
GPG Key ID: A02A2019A2BB0944
2 changed files with 33 additions and 27 deletions

View File

@ -12,7 +12,6 @@ import (
"regexp"
"strings"
"syscall"
"time"
"golang.org/x/text/encoding/unicode"
@ -243,27 +242,6 @@ func main() {
for _, pBoxStr := range cfg.AllowedEncryptionPublicKeys {
n.core.AddAllowedEncryptionPublicKey(pBoxStr)
}
// If any static peers were provided in the configuration above then we should
// configure them. The loop ensures that disconnected peers will eventually
// be reconnected with.
go func() {
if len(cfg.Peers) == 0 && len(cfg.InterfacePeers) == 0 {
return
}
for {
for _, peer := range cfg.Peers {
n.core.AddPeer(peer, "")
time.Sleep(time.Second)
}
for intf, intfpeers := range cfg.InterfacePeers {
for _, peer := range intfpeers {
n.core.AddPeer(peer, intf)
time.Sleep(time.Second)
}
}
time.Sleep(time.Minute)
}
}()
// The Stop function ensures that the TUN/TAP adapter is correctly shut down
// before the program exits.
defer func() {

View File

@ -7,6 +7,7 @@ import (
"net"
"regexp"
"sync"
"time"
"github.com/yggdrasil-network/yggdrasil-go/src/address"
"github.com/yggdrasil-network/yggdrasil-go/src/config"
@ -91,14 +92,39 @@ func (c *Core) init() error {
c.router.init(c)
c.switchTable.init(c) // TODO move before peers? before router?
if err := c.tcp.init(c); err != nil {
c.log.Println("Failed to start TCP interface")
return err
}
return nil
}
// If any static peers were provided in the configuration above then we should
// configure them. The loop ensures that disconnected peers will eventually
// be reconnected with.
func (c *Core) addPeerLoop() {
for {
// Get the peers from the config - these could change!
c.configMutex.RLock()
peers := c.config.Peers
interfacepeers := c.config.InterfacePeers
c.configMutex.RUnlock()
// Add peers from the Peers section
for _, peer := range peers {
c.AddPeer(peer, "")
time.Sleep(time.Second)
}
// Add peers from the InterfacePeers section
for intf, intfpeers := range interfacepeers {
for _, peer := range intfpeers {
c.AddPeer(peer, intf)
time.Sleep(time.Second)
}
}
// Sit for a while
time.Sleep(time.Minute)
}
}
// UpdateConfig updates the configuration in Core and then signals the
// various module goroutines to reconfigure themselves if needed
func (c *Core) UpdateConfig(config *config.NodeConfig) {
@ -245,6 +271,8 @@ func (c *Core) Start(nc *config.NodeConfig, log *log.Logger) error {
return err
}
go c.addPeerLoop()
c.log.Println("Startup complete")
return nil
}