fix: ffi instance be singleton

This commit is contained in:
liwei committed 2024-12-02 23:14:10 +08:00
1 parent 91dfd78b77
commit 4b4c03fd90
18 files changed
+844 -5336

No files matched your search

@@ -6,17 +6,15 @@ class LibgopeedChannel implements LibgopeedAbi {
static const _channel = MethodChannel('gopeed.com/libgopeed');
@override
Future<String> create(String cfg) async {
final result = await _channel.invokeMethod<String>('create', {
Future<void> init(String cfg) async {
await _channel.invokeMethod<String>('init', {
'cfg': cfg,
});
return result!;
}
@override
Future<String> invoke(int instance, String params) async {
Future<String> invoke(String params) async {
final result = await _channel.invokeMethod<String>('invoke', {
'instance': instance,
'params': params,
});
return result!;
File diff suppressed because it is too large. Load diff
@@ -1,4 +1,5 @@
import 'dart:async';
import 'dart:ffi';
import 'package:ffi/ffi.dart';
@@ -13,21 +14,25 @@ class LibgopeedFFi implements LibgopeedAbi {
}
@override
Future<String> create(String cfg) {
Future<void> init(String cfg) {
final cfgPtr = cfg.toNativeUtf8();
try {
final result = _libgopeed.Create(cfgPtr.cast());
return Future.value(result.cast<Utf8>().toDartString());
final result = _libgopeed.Init(cfgPtr.cast());
if (result != nullptr) {
throw Exception(
'Libgopeed init failed: ${result.cast<Utf8>().toDartString()}');
}
return Future.value();
} finally {
calloc.free(cfgPtr);
}
}
@override
Future<String> invoke(int instance, String params) {
Future<String> invoke(String params) {
final paramsPtr = params.toNativeUtf8();
try {
final result = _libgopeed.Invoke(instance, paramsPtr.cast());
final result = _libgopeed.Invoke(paramsPtr.cast());
return Future.value(result.cast<Utf8>().toDartString());
} finally {
calloc.free(paramsPtr);
@@ -17,13 +17,15 @@ import '../model/update_extension_settings.dart';
import 'model/start_config.dart';
abstract class LibgopeedAbi {
Future<String> create(String cfg);
Future<String> invoke(int instance, String params);
Future<void> init(String cfg);
Future<String> invoke(String params);
}
abstract class LibgopeedApiSingleton {
Future<LibgopeedApi> init(StartConfig config);
}
abstract class LibgopeedApi {
Future<void> init(StartConfig cfg);
Future<HttpListenResult> startHttp();
Future<void> stopHttp();