You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
1.9 KiB

import Flutter
public class OtaPlugin: NSObject, FlutterPlugin, FlutterStreamHandler {
var userManager: JLBleManager?
var eventSink: FlutterEventSink?
public static func register(with registrar: FlutterPluginRegistrar) {
let channel = FlutterMethodChannel(name: "ota", binaryMessenger: registrar.messenger())
let eventChannel = FlutterEventChannel(name: "com.example.ota/events", binaryMessenger: registrar.messenger())
let instance = OtaPlugin()
registrar.addMethodCallDelegate(instance, channel: channel)
eventChannel.setStreamHandler(instance)
}
public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
let arguments = call.arguments as? [String: Any]
switch call.method {
case "init":
userManager = JLBleManager.init()
result("")
case "startUpgrading":
let address = arguments?["address"] as? String
let filePath = arguments?["filePath"] as? String
startUpgrading(address: address, filePath: filePath)
result("")
case "onOtaClose":
onOtaClose()
result("")
default:
result(FlutterMethodNotImplemented)
}
}
public func onListen(withArguments arguments: Any?, eventSink events: @escaping FlutterEventSink) -> FlutterError? {
eventSink = events
return nil
}
public func onCancel(withArguments arguments: Any?) -> FlutterError? {
eventSink = nil
userManager?.flutterEventSink = nil
return nil
}
private func startUpgrading(address: String?, filePath: String?) {
if userManager?.mBleManagerState == CBManagerState.poweredOn {
userManager?.flutterEventSink = eventSink
userManager?.startScanBLE(address, filePath: filePath)
DispatchQueue.main.asyncAfter(deadline: .now() + 10.0) {
self.userManager?.stopScanBLE()
}
}
}
private func onOtaClose() {
userManager?.releaseAllResources()
userManager = nil
}
}