From 59e11e4e8adde0097f7d1789576d72672ebe0ab9 Mon Sep 17 00:00:00 2001 From: Matthias Radestock Date: Sun, 8 Nov 2015 11:15:31 +0000 Subject: [PATCH] refactor: more flexible Routes API --- router/router.go | 5 ++++- router/routes.go | 16 ++++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/router/router.go b/router/router.go index e02036bd..56a7c480 100644 --- a/router/router.go +++ b/router/router.go @@ -94,10 +94,13 @@ func NewRouter(config Config, name PeerName, nickName string) *Router { }) router.Peers.OnInvalidateShortIDs(router.Overlay.InvalidateShortIDs) - router.Routes = NewRoutes(router.Ourself, router.Peers, router.Overlay.InvalidateRoutes) + router.Routes = NewRoutes(router.Ourself, router.Peers) + router.Routes.OnChange(router.Overlay.InvalidateRoutes) + router.ConnectionMaker = NewConnectionMaker(router.Ourself, router.Peers, router.Port, router.PeerDiscovery) router.TopologyGossip = router.NewGossip("topology", router) router.acceptLimiter = NewTokenBucket(acceptMaxTokens, acceptTokenDelay) + return router } diff --git a/router/routes.go b/router/routes.go index b7ef0f30..8ea756ef 100644 --- a/router/routes.go +++ b/router/routes.go @@ -12,7 +12,7 @@ type Routes struct { sync.RWMutex ourself *LocalPeer peers *Peers - onChange func() + onChange []func() unicast unicastRoutes unicastAll unicastRoutes // [1] broadcast broadcastRoutes @@ -23,13 +23,12 @@ type Routes struct { // symmetric ones } -func NewRoutes(ourself *LocalPeer, peers *Peers, onChange func()) *Routes { +func NewRoutes(ourself *LocalPeer, peers *Peers) *Routes { recalculate := make(chan *struct{}, 1) wait := make(chan chan struct{}) routes := &Routes{ ourself: ourself, peers: peers, - onChange: onChange, unicast: make(unicastRoutes), unicastAll: make(unicastRoutes), broadcast: make(broadcastRoutes), @@ -44,6 +43,12 @@ func NewRoutes(ourself *LocalPeer, peers *Peers, onChange func()) *Routes { return routes } +func (routes *Routes) OnChange(callback func()) { + routes.Lock() + defer routes.Unlock() + routes.onChange = append(routes.onChange, callback) +} + func (routes *Routes) PeerNames() PeerNameSet { return routes.peers.Names() } @@ -159,10 +164,13 @@ func (routes *Routes) calculate() { routes.unicastAll = unicastAll routes.broadcast = broadcast routes.broadcastAll = broadcastAll + onChange := routes.onChange routes.Unlock() if !unicast.equals(oldUnicast) || !broadcast.equals(oldBroadcast) { - routes.onChange() + for _, callback := range onChange { + callback() + } } }