|
|
|
@@ -21,16 +21,8 @@ class RgbaFrame extends Struct {
|
|
|
|
|
external Pointer<Uint8> data;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
typedef F2 = Pointer<Utf8> Function(Pointer<Utf8>, Pointer<Utf8>);
|
|
|
|
|
typedef F3 = Pointer<Uint8> Function(Pointer<Utf8>);
|
|
|
|
|
typedef F4 = Uint64 Function(Pointer<Utf8>);
|
|
|
|
|
typedef F4Dart = int Function(Pointer<Utf8>);
|
|
|
|
|
typedef F5 = Void Function(Pointer<Utf8>);
|
|
|
|
|
typedef F5Dart = void Function(Pointer<Utf8>);
|
|
|
|
|
typedef HandleEvent = Future<void> Function(Map<String, dynamic> evt);
|
|
|
|
|
// pub fn session_register_texture(id: *const char, ptr: usize)
|
|
|
|
|
typedef F6 = Void Function(Pointer<Utf8>, Uint64);
|
|
|
|
|
typedef F6Dart = void Function(Pointer<Utf8>, int);
|
|
|
|
|
|
|
|
|
|
/// FFI wrapper around the native Rust core.
|
|
|
|
|
/// Hides the platform differences.
|
|
|
|
@@ -38,7 +30,6 @@ class PlatformFFI {
|
|
|
|
|
String _dir = '';
|
|
|
|
|
// _homeDir is only needed for Android and IOS.
|
|
|
|
|
String _homeDir = '';
|
|
|
|
|
F2? _translate;
|
|
|
|
|
final _eventHandlers = <String, Map<String, HandleEvent>>{};
|
|
|
|
|
late RustdeskImpl _ffiBind;
|
|
|
|
|
late String _appType;
|
|
|
|
@@ -51,9 +42,6 @@ class PlatformFFI {
|
|
|
|
|
|
|
|
|
|
RustdeskImpl get ffiBind => _ffiBind;
|
|
|
|
|
F3? _session_get_rgba;
|
|
|
|
|
F4Dart? _session_get_rgba_size;
|
|
|
|
|
F5Dart? _session_next_rgba;
|
|
|
|
|
F6Dart? _session_register_texture;
|
|
|
|
|
|
|
|
|
|
static get localeName => Platform.localeName;
|
|
|
|
|
|
|
|
|
@@ -89,18 +77,8 @@ class PlatformFFI {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
String translate(String name, String locale) {
|
|
|
|
|
if (_translate == null) return name;
|
|
|
|
|
var a = name.toNativeUtf8();
|
|
|
|
|
var b = locale.toNativeUtf8();
|
|
|
|
|
var p = _translate!(a, b);
|
|
|
|
|
assert(p != nullptr);
|
|
|
|
|
final res = p.toDartString();
|
|
|
|
|
calloc.free(p);
|
|
|
|
|
calloc.free(a);
|
|
|
|
|
calloc.free(b);
|
|
|
|
|
return res;
|
|
|
|
|
}
|
|
|
|
|
String translate(String name, String locale) =>
|
|
|
|
|
_ffiBind.translate(name: name, locale: locale);
|
|
|
|
|
|
|
|
|
|
Uint8List? getRgba(SessionID sessionId, int bufSize) {
|
|
|
|
|
if (_session_get_rgba == null) return null;
|
|
|
|
@@ -118,30 +96,11 @@ class PlatformFFI {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int? getRgbaSize(SessionID sessionId) {
|
|
|
|
|
if (_session_get_rgba_size == null) return null;
|
|
|
|
|
final sessionIdStr = sessionId.toString();
|
|
|
|
|
var a = sessionIdStr.toNativeUtf8();
|
|
|
|
|
final bufferSize = _session_get_rgba_size!(a);
|
|
|
|
|
malloc.free(a);
|
|
|
|
|
return bufferSize;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nextRgba(SessionID sessionId) {
|
|
|
|
|
if (_session_next_rgba == null) return;
|
|
|
|
|
final sessionIdStr = sessionId.toString();
|
|
|
|
|
final a = sessionIdStr.toNativeUtf8();
|
|
|
|
|
_session_next_rgba!(a);
|
|
|
|
|
malloc.free(a);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void registerTexture(SessionID sessionId, int ptr) {
|
|
|
|
|
if (_session_register_texture == null) return;
|
|
|
|
|
final sessionIdStr = sessionId.toString();
|
|
|
|
|
final a = sessionIdStr.toNativeUtf8();
|
|
|
|
|
_session_register_texture!(a, ptr);
|
|
|
|
|
malloc.free(a);
|
|
|
|
|
}
|
|
|
|
|
int getRgbaSize(SessionID sessionId) =>
|
|
|
|
|
_ffiBind.sessionGetRgbaSize(sessionId: sessionId);
|
|
|
|
|
void nextRgba(SessionID sessionId) => _ffiBind.sessionNextRgba(sessionId: sessionId);
|
|
|
|
|
void registerTexture(SessionID sessionId, int ptr) =>
|
|
|
|
|
_ffiBind.sessionRegisterTexture(sessionId: sessionId, ptr: ptr);
|
|
|
|
|
|
|
|
|
|
/// Init the FFI class, loads the native Rust core library.
|
|
|
|
|
Future<void> init(String appType) async {
|
|
|
|
@@ -157,14 +116,7 @@ class PlatformFFI {
|
|
|
|
|
: DynamicLibrary.process();
|
|
|
|
|
debugPrint('initializing FFI $_appType');
|
|
|
|
|
try {
|
|
|
|
|
_translate = dylib.lookupFunction<F2, F2>('translate');
|
|
|
|
|
_session_get_rgba = dylib.lookupFunction<F3, F3>("session_get_rgba");
|
|
|
|
|
_session_get_rgba_size =
|
|
|
|
|
dylib.lookupFunction<F4, F4Dart>("session_get_rgba_size");
|
|
|
|
|
_session_next_rgba =
|
|
|
|
|
dylib.lookupFunction<F5, F5Dart>("session_next_rgba");
|
|
|
|
|
_session_register_texture =
|
|
|
|
|
dylib.lookupFunction<F6, F6Dart>("session_register_texture");
|
|
|
|
|
try {
|
|
|
|
|
// SYSTEM user failed
|
|
|
|
|
_dir = (await getApplicationDocumentsDirectory()).path;
|
|
|
|
|