From 719e5b6b7430b6d5ae50d1b4a3ac2dea04c0acb0 Mon Sep 17 00:00:00 2001 From: Joe Heck Date: Thu, 11 Apr 2024 13:36:44 -0700 Subject: [PATCH] make an explicit start and stop for listening on Peer2Peer network --- .../Providers/PeerToPeerProvider.swift | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/Sources/AutomergeRepo/Networking/Providers/PeerToPeerProvider.swift b/Sources/AutomergeRepo/Networking/Providers/PeerToPeerProvider.swift index f1e7548..f720db5 100644 --- a/Sources/AutomergeRepo/Networking/Providers/PeerToPeerProvider.swift +++ b/Sources/AutomergeRepo/Networking/Providers/PeerToPeerProvider.swift @@ -221,9 +221,6 @@ public actor PeerToPeerProvider: NetworkProvider { let defaultName = await PeerToPeerProviderConfiguration.defaultSharingIdentity() resetName(defaultName) } - if listener == nil { - self.setupBonjourListener() - } } } @@ -247,6 +244,24 @@ public actor PeerToPeerProvider: NetworkProvider { } } + public func startListening(as peerName: String? = nil) async throws { + if let peerName { + resetName(peerName) + } + if self.peerName.isEmpty { + throw Errors.NetworkProviderError(msg: "No peer name is set on the provider") + } + if listener == nil { + self.setupBonjourListener() + } + } + + public func stopListening() async { + await disconnect() + listener?.cancel() + listener = nil + } + // MARK: Outgoing connection functions // Returns a new websocketTask to track (at which point, save the url as the endpoint) @@ -726,12 +741,6 @@ public actor PeerToPeerProvider: NetworkProvider { Logger.peerProtocol.warning("receive and reconnect loop for \(endpoint.debugDescription) terminated") } - // Stop all listeners. - fileprivate func stopListening() { - listener?.cancel() - listener = nil - } - // Update the advertised name on the network. fileprivate func resetName(_ name: String) { self.peerName = name