Skip to content

Instantly share code, notes, and snippets.

@wizard1066
Created April 17, 2020 11:09
Show Gist options
  • Save wizard1066/19bda8f5d6808682e2bcc88fd06c1466 to your computer and use it in GitHub Desktop.
Save wizard1066/19bda8f5d6808682e2bcc88fd06c1466 to your computer and use it in GitHub Desktop.
ddwtp13
import UIKit
import Combine
import Network
final class BonjourBrowser: NSObject, ObservableObject, Identifiable {
struct objectOf:Hashable {
var id:UUID? = UUID()
var device:String = ""
var IsIndexed:Int = 0
}
@Published var devices: [objectOf] = [] {
willSet {
objectWillChange.send()
}
}
var browser: NWBrowser!
func seek(typeOf: String) {
let bonjourTCP = NWBrowser.Descriptor.bonjour(type: typeOf , domain: nil)
let bonjourParms = NWParameters.init()
browser = NWBrowser(for: bonjourTCP, using: bonjourParms)
browser.stateUpdateHandler = {newState in
switch newState {
case .ready:
print("new bonjour connection")
default:
break
}
}
browser.browseResultsChangedHandler = { ( results, changes ) in
for change in changes {
if case .added(let added) = change {
if case .service(let service) = added.endpoint {
let device = objectOf(device: service.name, IsIndexed: self.devices.count)
self.devices.append(device)
}
if case .removed(let removed) = change {
if case .service(let service) = removed.endpoint {
let index = self.devices.firstIndex(where:{$0.device == service.name })
self.devices.remove(at: index!)
}
}
}
}
}
self.browser.start(queue: DispatchQueue.main)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment