Files
MWClash/lib/core/lib.dart
chen08209 ddc07e9f29 Add android separates the core process
Support core status check and force restart

Optimize proxies page and access page

Update flutter and pub dependencies

Optimize more details
2025-09-17 17:12:11 +08:00

69 lines
1.5 KiB
Dart

import 'dart:async';
import 'package:fl_clash/common/common.dart';
import 'package:fl_clash/enum/enum.dart';
import 'package:fl_clash/models/core.dart';
import 'package:fl_clash/plugins/service.dart';
import 'package:fl_clash/state.dart';
import 'interface.dart';
class CoreLib extends CoreHandlerInterface {
static CoreLib? _instance;
Completer<bool> _connectedCompleter = Completer();
CoreLib._internal();
@override
Future<String> preload() async {
final res = await service?.init();
if (res?.isEmpty != true) {
return res ?? '';
}
_connectedCompleter.complete(true);
final syncRes = await service?.syncAndroidState(
globalState.getAndroidState(),
);
return syncRes ?? '';
}
factory CoreLib() {
_instance ??= CoreLib._internal();
return _instance!;
}
@override
destroy() async {
return true;
}
@override
Future<bool> shutdown() async {
await service?.shutdown();
_connectedCompleter = Completer();
return true;
}
@override
Future<T?> invoke<T>({
required ActionMethod method,
dynamic data,
Duration? timeout,
}) async {
final id = '${method.name}#${utils.id}';
final result = await service
?.invokeAction(Action(id: id, method: method, data: data))
.withTimeout(onTimeout: () => null);
if (result == null) {
return null;
}
return parasResult<T>(result);
}
@override
Future get connected => _connectedCompleter.future;
}
CoreLib? get coreLib => system.isAndroid ? CoreLib() : null;