From 8a9c4d68e3551587209b9fbb5386b5fb3d34cc5a Mon Sep 17 00:00:00 2001 From: Prem Chaitanya Prathi Date: Sun, 20 Aug 2023 18:06:35 +0530 Subject: [PATCH] feat: register for local node's reachability change (#651) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat:Register for reachability change and log status Co-authored-by: richΛrd --------- Co-authored-by: richΛrd --- waku/v2/node/localnode.go | 25 +++++++++++++++++++++++++ waku/v2/node/wakunode2.go | 1 + 2 files changed, 26 insertions(+) diff --git a/waku/v2/node/localnode.go b/waku/v2/node/localnode.go index 22113125..329f3feb 100644 --- a/waku/v2/node/localnode.go +++ b/waku/v2/node/localnode.go @@ -8,6 +8,7 @@ import ( "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/libp2p/go-libp2p/core/event" ma "github.com/multiformats/go-multiaddr" "github.com/waku-org/go-waku/waku/v2/protocol" wenr "github.com/waku-org/go-waku/waku/v2/protocol/enr" @@ -344,3 +345,27 @@ func (w *WakuNode) watchTopicShards(ctx context.Context) error { return nil } + +func (w *WakuNode) registerAndMonitorReachability(ctx context.Context) { + var myEventSub event.Subscription + var err error + if myEventSub, err = w.host.EventBus().Subscribe(new(event.EvtLocalReachabilityChanged)); err != nil { + w.log.Error("failed to register with libp2p for reachability status", zap.Error(err)) + return + } + w.wg.Add(1) + go func() { + defer myEventSub.Close() + defer w.wg.Done() + + for { + select { + case evt := <-myEventSub.Out(): + reachability := evt.(event.EvtLocalReachabilityChanged).Reachability + w.log.Info("Node reachability changed", zap.Stringer("newReachability", reachability)) + case <-ctx.Done(): + return + } + } + }() +} diff --git a/waku/v2/node/wakunode2.go b/waku/v2/node/wakunode2.go index a4567533..b1bd9c35 100644 --- a/waku/v2/node/wakunode2.go +++ b/waku/v2/node/wakunode2.go @@ -408,6 +408,7 @@ func (w *WakuNode) Start(ctx context.Context) error { return err } w.peermanager.Start(ctx) + w.registerAndMonitorReachability(ctx) } w.store = w.storeFactory(w)