36 lines
1.1 KiB
Swift
36 lines
1.1 KiB
Swift
import Flutter
|
|
|
|
class ConnectedDeviceStreamHandler: NSObject, FlutterStreamHandler {
|
|
private var eventSink: FlutterEventSink?
|
|
private var timer : Timer?
|
|
|
|
func onListen(withArguments arguments: Any?, eventSink: @escaping FlutterEventSink) -> FlutterError? {
|
|
let deviceId = arguments as! String
|
|
self.eventSink = eventSink
|
|
startSendingUpdates(deviceId: deviceId)
|
|
return nil
|
|
}
|
|
|
|
func onCancel(withArguments arguments: Any?) -> FlutterError? {
|
|
stopSendingUpdates()
|
|
eventSink = nil
|
|
return nil
|
|
}
|
|
|
|
func startSendingUpdates(deviceId:String) {
|
|
self.timer = Timer.scheduledTimer(withTimeInterval: 2.0, repeats: true) { [weak self] _ in
|
|
guard let self = self else { return }
|
|
var result: String?
|
|
if let device = NearbyDevicesStore.instance.find(for: deviceId) {
|
|
result = device.toJsonString()
|
|
}
|
|
self.eventSink?(result)
|
|
}
|
|
}
|
|
|
|
func stopSendingUpdates() {
|
|
self.timer?.invalidate()
|
|
self.timer = nil
|
|
}
|
|
}
|