61 lines
1.3 KiB
Dart
61 lines
1.3 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 'interface.dart';
|
|
|
|
class CoreLib extends CoreHandlerInterface {
|
|
static CoreLib? _instance;
|
|
|
|
Completer<bool> _connectedCompleter = Completer();
|
|
|
|
CoreLib._internal();
|
|
|
|
@override
|
|
Future<bool> preload() async {
|
|
await service?.init();
|
|
_connectedCompleter.complete(true);
|
|
return true;
|
|
}
|
|
|
|
factory CoreLib() {
|
|
_instance ??= CoreLib._internal();
|
|
return _instance!;
|
|
}
|
|
|
|
@override
|
|
destroy() async {
|
|
return true;
|
|
}
|
|
|
|
@override
|
|
Future<bool> shutdown() async {
|
|
_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;
|