From e5bfc5d18769bf79add08ddf0da2d3c2e235d96c Mon Sep 17 00:00:00 2001 From: Calvin Kim Date: Tue, 6 Aug 2024 17:56:33 +0900 Subject: [PATCH] main: add ConnectedPeers() to server ConnectedPeers returns all the currently connected peers. This is used to provide the query.WorkManager with all the currently connected peers from the netsync package. --- server.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/server.go b/server.go index 66794e4bb7..52d3459023 100644 --- a/server.go +++ b/server.go @@ -1982,6 +1982,34 @@ type removeNodeMsg struct { reply chan error } +// ConnectedPeers returns an array consisting of all connected peers. +func (s *server) ConnectedPeers() []*peer.Peer { + replyChan := make(chan []*serverPeer, 1) + + // Send a query for a subscription for the connected peers. + select { + case s.query <- getPeersMsg{ + reply: replyChan, + }: + + case <-s.quit: + return nil + } + + // Wait for the result here. + select { + case reply := <-replyChan: + peers := make([]*peer.Peer, 0, len(reply)) + for _, sp := range reply { + peers = append(peers, sp.Peer) + } + + return peers + case <-s.quit: + return nil + } +} + // handleQuery is the central handler for all queries and commands from other // goroutines related to peer state. func (s *server) handleQuery(state *peerState, querymsg interface{}) {