Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Morepublish #31

Merged
merged 2 commits into from
Apr 15, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ public actor PeerToPeerProvider: NetworkProvider {
var delegate: (any NetworkEventReceiver)?
var peerId: PEER_ID? // this providers peer Id
var peerMetadata: PeerMetadata? // this providers peer metadata

public var peerName: String

// the human-readable name to advertise on Bonjour alongside peerId
Expand Down Expand Up @@ -108,6 +108,9 @@ public actor PeerToPeerProvider: NetworkProvider {
public nonisolated let availablePeerPublisher: PassthroughSubject<[AvailablePeer], Never>
public nonisolated let connectionPublisher: PassthroughSubject<[PeerConnection], Never>

public nonisolated let browserStatePublisher: PassthroughSubject<NWBrowser.State, Never>
public nonisolated let listenerStatePublisher: PassthroughSubject<NWListener.State, Never>

// this allows us to create a provider, but it's not ready to go until
// its fully configured by setting a delegate on it, which initializes
// not only delegate, but also peerId and the optional peerMetadata
Expand Down Expand Up @@ -147,6 +150,8 @@ public actor PeerToPeerProvider: NetworkProvider {
// self.availablePeerChannel = AsyncChannel()
self.availablePeerPublisher = PassthroughSubject()
self.connectionPublisher = PassthroughSubject()
self.browserStatePublisher = PassthroughSubject()
self.listenerStatePublisher = PassthroughSubject()
}

deinit {
Expand Down Expand Up @@ -232,6 +237,7 @@ public actor PeerToPeerProvider: NetworkProvider {
) async {
self.delegate = delegate
self.peerId = peerId
txtRecord[TXTRecordKeys.peer_id] = peerId
self.peerMetadata = metadata
if peerName.isEmpty {
let defaultName = await PeerToPeerProviderConfiguration.defaultSharingIdentity()
Expand Down Expand Up @@ -481,6 +487,7 @@ public actor PeerToPeerProvider: NetworkProvider {
}

private func reactToNWBrowserStateUpdate(_ newState: NWBrowser.State) async {
browserStatePublisher.send(newState)
switch newState {
case let .failed(error):
// Restart the browser if it loses its connection.
Expand Down Expand Up @@ -553,6 +560,7 @@ public actor PeerToPeerProvider: NetworkProvider {
guard let listener = self.listener else {
return
}
listenerStatePublisher.send(newState)
switch newState {
case .ready:
if let port = listener.port {
Expand Down