mirror of
https://github.com/logos-messaging/logos-messaging-dart-bindings.git
synced 2026-01-03 22:33:06 +00:00
103 lines
2.9 KiB
Dart
103 lines
2.9 KiB
Dart
import 'dart:async';
|
|
import 'dart:ffi';
|
|
import 'package:ffi/ffi.dart';
|
|
import 'bindings.dart';
|
|
|
|
class Waku {
|
|
final Pointer<Void> _context;
|
|
|
|
Waku._(this._context);
|
|
|
|
static Future<Waku> newInstance(String configJson) async {
|
|
late final NativeCallable<WakuCallBackC> callback;
|
|
|
|
final completer = Completer<CallbackResult>();
|
|
void onCallCompleted(
|
|
int callerRet, Pointer<Utf8> msg, int len, Pointer<Void> userData) {
|
|
print("instance is created callback");
|
|
completer.complete(CallbackResult()
|
|
..callerRet = callerRet
|
|
..msg = msg.toDartString(length: len));
|
|
callback.close();
|
|
}
|
|
|
|
callback = NativeCallable<WakuCallBackC>.listener(onCallCompleted);
|
|
|
|
final configPtr = configJson.toNativeUtf8();
|
|
final context = waku_new(configPtr, callback.nativeFunction, nullptr);
|
|
|
|
final callResult = await completer.future;
|
|
|
|
malloc.free(configPtr);
|
|
|
|
final wakuCompleter = Completer<Waku>();
|
|
|
|
if (callResult.callerRet != 0) {
|
|
print("Could not create instance");
|
|
wakuCompleter
|
|
.completeError('Failed to create Waku instance: ${callResult.msg}');
|
|
} else {
|
|
wakuCompleter.complete(Waku._(context));
|
|
}
|
|
|
|
return wakuCompleter.future;
|
|
}
|
|
|
|
Future<CallbackResult> destroyInstance() async {
|
|
late final NativeCallable<WakuCallBackC> callback;
|
|
|
|
final completer = Completer<CallbackResult>();
|
|
void onCallCompleted(
|
|
int callerRet, Pointer<Utf8> msg, int len, Pointer<Void> userData) {
|
|
completer.complete(CallbackResult()
|
|
..callerRet = callerRet
|
|
..msg = msg.toDartString(length: len));
|
|
callback.close();
|
|
}
|
|
|
|
callback = NativeCallable<WakuCallBackC>.listener(onCallCompleted);
|
|
|
|
waku_destroy(_context, callback.nativeFunction, nullptr);
|
|
|
|
return completer.future;
|
|
}
|
|
|
|
Future<CallbackResult> start() async {
|
|
late final NativeCallable<WakuCallBackC> callback;
|
|
|
|
final completer = Completer<CallbackResult>();
|
|
void onCallCompleted(
|
|
int callerRet, Pointer<Utf8> msg, int len, Pointer<Void> userData) {
|
|
completer.complete(CallbackResult()
|
|
..callerRet = callerRet
|
|
..msg = msg.toDartString(length: len));
|
|
callback.close();
|
|
}
|
|
|
|
callback = NativeCallable<WakuCallBackC>.listener(onCallCompleted);
|
|
|
|
waku_start(_context, callback.nativeFunction, nullptr);
|
|
|
|
return completer.future;
|
|
}
|
|
|
|
Future<CallbackResult> stop() async {
|
|
late final NativeCallable<WakuCallBackC> callback;
|
|
|
|
final completer = Completer<CallbackResult>();
|
|
void onCallCompleted(
|
|
int callerRet, Pointer<Utf8> msg, int len, Pointer<Void> userData) {
|
|
completer.complete(CallbackResult()
|
|
..callerRet = callerRet
|
|
..msg = msg.toDartString(length: len));
|
|
callback.close();
|
|
}
|
|
|
|
callback = NativeCallable<WakuCallBackC>.listener(onCallCompleted);
|
|
|
|
waku_stop(_context, callback.nativeFunction, nullptr);
|
|
|
|
return completer.future;
|
|
}
|
|
}
|