69 lines
1.6 KiB
Dart
69 lines
1.6 KiB
Dart
import 'dart:async';
|
|
|
|
import 'package:fl_clash/common/common.dart';
|
|
import 'package:fl_clash/controller.dart';
|
|
import 'package:fl_clash/enum/enum.dart';
|
|
import 'package:fl_clash/models/core.dart';
|
|
import 'package:fl_clash/plugins/service.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?.syncState(appController.sharedState);
|
|
return syncRes ?? '';
|
|
}
|
|
|
|
factory CoreLib() {
|
|
_instance ??= CoreLib._internal();
|
|
return _instance!;
|
|
}
|
|
|
|
@override
|
|
destroy() async {
|
|
return true;
|
|
}
|
|
|
|
@override
|
|
Future<bool> shutdown(_) async {
|
|
if (!_connectedCompleter.isCompleted) {
|
|
return false;
|
|
}
|
|
_connectedCompleter = Completer();
|
|
return service?.shutdown() ?? 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
|
|
Completer get completer => _connectedCompleter;
|
|
}
|
|
|
|
CoreLib? get coreLib => system.isAndroid ? CoreLib() : null;
|