Support core status check and force restart Optimize proxies page and access page Update flutter and pub dependencies Update go version Optimize more details
69 lines
1.5 KiB
Dart
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;
|