import Foundation import Combine import Libcore class KRLogsEventHandler: NSObject, FlutterPlugin, FlutterStreamHandler { static let name = "\(Bundle.main.serviceIdentifier)/service.logs" private var commandClient: CommandClient? private var events: FlutterEventSink? private var channel: FlutterEventChannel? private var cancellable: AnyCancellable? public static func register(with registrar: FlutterPluginRegistrar) { let instance = KRLogsEventHandler() instance.channel = FlutterEventChannel(name: Self.name, binaryMessenger: registrar.messenger()) instance.channel?.setStreamHandler(instance) } public func onListen(withArguments arguments: Any?, eventSink events: @escaping FlutterEventSink) -> FlutterError? { FileManager.default.changeCurrentDirectoryPath(FilePath.sharedDirectory.path) self.events = events commandClient = CommandClient(.log) commandClient?.connect() cancellable = commandClient?.$logList.sink{ [self] logs in events(logs) } return nil } public func onCancel(withArguments arguments: Any?) -> FlutterError? { commandClient?.disconnect() cancellable?.cancel() events = nil return nil } } /* extension KRLogsEventHandler { public func kr_clearLog() {} public func kr_connected() {} public func kr_disconnected(_ message: String?) {} public func kr_initializeClashMode(_ modeList: LibboxStringIteratorProtocol?, currentMode: String?) {} public func kr_updateClashMode(_ newMode: String?) {} public func kr_writeGroups(_ message: LibboxOutboundGroupIteratorProtocol?) {} public func kr_writeStatus(_ message: LibboxStatusMessage?) {} } */