Files

58 lines
1.4 KiB
Swift

//
// CommunicationProvider.swift
// Peered
//
// Created by Oskar Chybowski on 11/05/2025.
//
import Foundation
import MultipeerConnectivity
@Observable
final class CommunicationProvider: NSObject, MCNearbyServiceBrowserDelegate {
private let session: MCSession
private let browser: MCNearbyServiceBrowser
private let advertiser: MCNearbyServiceAdvertiser
private(set) var availablePeers: [MCPeerID] = []
init(id: String) {
let id = MCPeerID(displayName: id)
session = MCSession(peer: id, securityIdentity: nil, encryptionPreference: .required)
browser = MCNearbyServiceBrowser(peer: id, serviceType: "peered")
advertiser = MCNearbyServiceAdvertiser(
peer: browser.myPeerID,
discoveryInfo: [:],
serviceType: "peered"
)
super.init()
browser.delegate = self
start()
}
func start() {
advertiser.startAdvertisingPeer()
browser.startBrowsingForPeers()
}
func stop() {
browser.stopBrowsingForPeers()
advertiser.stopAdvertisingPeer()
}
func browser(
_ browser: MCNearbyServiceBrowser,
foundPeer peerID: MCPeerID,
withDiscoveryInfo info: [String: String]?
) {
availablePeers.append(peerID)
browser.invitePeer(peerID, to: session, withContext: nil, timeout: 30)
}
func browser(_ browser: MCNearbyServiceBrowser, lostPeer peerID: MCPeerID) {
availablePeers.removeAll { id in
id == peerID
}
}
}