Externalize NWBrowser dependency in PrinterRequestManager into protocol for testing
This commit is contained in:
@@ -9,6 +9,28 @@ import Foundation
|
||||
import Network
|
||||
import Starscream
|
||||
|
||||
// MARK: Bonjour Protocol
|
||||
|
||||
protocol NetworkDiscoveryEngine {
|
||||
func startScan(queue: DispatchQueue)
|
||||
func setBrowseResultsChangedHandler(_ handler: @escaping ((Set<NWBrowser.Result>, Set<NWBrowser.Result.Change>) -> Void))
|
||||
func setStateUpdateHandler(_ handler: @escaping ((NWBrowser.State) -> Void))
|
||||
}
|
||||
|
||||
extension NWBrowser: NetworkDiscoveryEngine {
|
||||
func startScan(queue: DispatchQueue) {
|
||||
start(queue: queue)
|
||||
}
|
||||
func setBrowseResultsChangedHandler(_ handler: @escaping ((Set<NWBrowser.Result>, Set<NWBrowser.Result.Change>) -> Void)) {
|
||||
self.browseResultsChangedHandler = handler
|
||||
}
|
||||
func setStateUpdateHandler(_ handler: @escaping ((State) -> Void)) {
|
||||
self.stateUpdateHandler = handler
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: Starscream Protocol
|
||||
|
||||
struct JsonRpcRequest: Codable {
|
||||
var jsonrpc = "2.0"
|
||||
let method: String
|
||||
@@ -67,7 +89,8 @@ class PrinterRequestManager: ObservableObject, WebSocketDelegate {
|
||||
@Published var socketHost: String
|
||||
@Published var socketPort: String
|
||||
|
||||
let nwBrowser = NWBrowser(for: .bonjourWithTXTRecord(type: "_moonraker._tcp", domain: "local."), using: .tcp)
|
||||
let nwBrowser: NetworkDiscoveryEngine
|
||||
//let nwBrowser = NWBrowser(for: .bonjourWithTXTRecord(type: "_moonraker._tcp", domain: "local."), using: .tcp)
|
||||
var connection: NWConnection!
|
||||
|
||||
var socket: WebSocket?
|
||||
@@ -101,13 +124,14 @@ class PrinterRequestManager: ObservableObject, WebSocketDelegate {
|
||||
}
|
||||
}
|
||||
|
||||
private init() {
|
||||
private init(browser: NetworkDiscoveryEngine = NWBrowser(for: .bonjourWithTXTRecord(type: "_moonraker._tcp", domain: "local."), using: .tcp)) {
|
||||
state = ""
|
||||
progress = 0.0
|
||||
extruderTemperature = 0.0
|
||||
bedTemperature = 0.0
|
||||
socketHost = ""
|
||||
socketPort = ""
|
||||
nwBrowser = browser
|
||||
//reconnectionTimer = nil
|
||||
|
||||
// MARK: Debug stuff
|
||||
@@ -121,15 +145,15 @@ class PrinterRequestManager: ObservableObject, WebSocketDelegate {
|
||||
}
|
||||
|
||||
// MARK: Bonjour browser initialization at instantiation
|
||||
nwBrowser.browseResultsChangedHandler = { (newResults, changes) in
|
||||
nwBrowser.setBrowseResultsChangedHandler({ (newResults, changes) in
|
||||
print("[update] Results changed.")
|
||||
newResults.forEach { result in
|
||||
print(result)
|
||||
self.nwBrowserDiscoveredItems.append(result)
|
||||
}
|
||||
}
|
||||
})
|
||||
// Bonjour browser state update handler
|
||||
nwBrowser.stateUpdateHandler = { newState in
|
||||
nwBrowser.setStateUpdateHandler({ newState in
|
||||
switch newState {
|
||||
case .failed(let error):
|
||||
print("[error] nwbrowser: \(error)")
|
||||
@@ -140,9 +164,9 @@ class PrinterRequestManager: ObservableObject, WebSocketDelegate {
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
})
|
||||
// Start up the bonjour browser, get results and process them in the update handler
|
||||
nwBrowser.start(queue: DispatchQueue.main)
|
||||
nwBrowser.startScan(queue: DispatchQueue.main)
|
||||
}
|
||||
|
||||
// Called from the UI with an endpoint.
|
||||
|
Reference in New Issue
Block a user