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

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);