58 lines
1.4 KiB
Swift
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
|
|
}
|
|
}
|
|
}
|