abe519dae7
* Add macOS support * Update README * Update to v0.2.0 * Document breaking changes * Delete widget tests
44 lines
1.3 KiB
Swift
44 lines
1.3 KiB
Swift
#if os(iOS)
|
|
import Flutter
|
|
#elseif os(macOS)
|
|
import FlutterMacOS
|
|
#endif
|
|
import MultipeerConnectivity
|
|
|
|
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),
|
|
let session = device.session {
|
|
if (session.state == MCSessionState.connected) {
|
|
result = device.toDartFormat()
|
|
}
|
|
}
|
|
self.eventSink?(result)
|
|
}
|
|
}
|
|
|
|
func stopSendingUpdates() {
|
|
self.timer?.invalidate()
|
|
self.timer = nil
|
|
}
|
|
}
|