hi-client/ios/Runner/Handlers/KRLogsEventHandler.swift
2025-10-13 18:08:02 +08:00

50 lines
1.8 KiB
Swift
Executable File

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?) {}
}
*/