config change
This commit is contained in:
@@ -1,955 +0,0 @@
|
||||
// AUTO GENERATED FILE, DO NOT EDIT.
|
||||
// Generated by `flutter_rust_bridge`.
|
||||
|
||||
// ignore_for_file: non_constant_identifier_names, unused_element, duplicate_ignore, directives_ordering, curly_braces_in_flow_control_structures, unnecessary_lambdas, slash_for_doc_comments, prefer_const_literals_to_create_immutables, implicit_dynamic_list_literal, duplicate_import, unused_import
|
||||
|
||||
import 'dart:convert';
|
||||
import 'dart:typed_data';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
|
||||
import 'dart:convert';
|
||||
import 'dart:typed_data';
|
||||
import 'package:flutter_rust_bridge/flutter_rust_bridge.dart';
|
||||
import 'dart:ffi' as ffi;
|
||||
|
||||
part 'bridge_generated.freezed.dart';
|
||||
|
||||
abstract class VeilidFlutter {
|
||||
Stream<VeilidUpdate> startupVeilidCore(
|
||||
{required VeilidConfig config, dynamic hint});
|
||||
|
||||
Future<VeilidState> getVeilidState({dynamic hint});
|
||||
|
||||
Future<void> changeApiLogLevel(
|
||||
{required VeilidLogLevel logLevel, dynamic hint});
|
||||
|
||||
Future<void> shutdownVeilidCore({dynamic hint});
|
||||
|
||||
Future<String> veilidVersionString({dynamic hint});
|
||||
|
||||
Future<VeilidVersion> veilidVersion({dynamic hint});
|
||||
}
|
||||
|
||||
enum AttachmentState {
|
||||
Detached,
|
||||
Attaching,
|
||||
AttachedWeak,
|
||||
AttachedGood,
|
||||
AttachedStrong,
|
||||
FullyAttached,
|
||||
OverAttached,
|
||||
Detaching,
|
||||
}
|
||||
|
||||
class VeilidConfig {
|
||||
final String programName;
|
||||
final String veilidNamespace;
|
||||
final VeilidLogLevel apiLogLevel;
|
||||
final bool capabilitiesProtocolUdp;
|
||||
final bool capabilitiesProtocolConnectTcp;
|
||||
final bool capabilitiesProtocolAcceptTcp;
|
||||
final bool capabilitiesProtocolConnectWs;
|
||||
final bool capabilitiesProtocolAcceptWs;
|
||||
final bool capabilitiesProtocolConnectWss;
|
||||
final bool capabilitiesProtocolAcceptWss;
|
||||
final bool protectedStoreAllowInsecureFallback;
|
||||
final bool protectedStoreAlwaysUseInsecureStorage;
|
||||
final String protectedStoreInsecureFallbackDirectory;
|
||||
final bool protectedStoreDelete;
|
||||
final String tableStoreDirectory;
|
||||
final bool tableStoreDelete;
|
||||
final String blockStoreDirectory;
|
||||
final bool blockStoreDelete;
|
||||
final int networkMaxConnections;
|
||||
final int networkConnectionInitialTimeoutMs;
|
||||
final String networkNodeId;
|
||||
final String networkNodeIdSecret;
|
||||
final List<String> networkBootstrap;
|
||||
final bool networkUpnp;
|
||||
final bool networkNatpmp;
|
||||
final bool networkEnableLocalPeerScope;
|
||||
final int networkRestrictedNatRetries;
|
||||
final int networkRpcConcurrency;
|
||||
final int networkRpcQueueSize;
|
||||
final int? networkRpcMaxTimestampBehindMs;
|
||||
final int? networkRpcMaxTimestampAheadMs;
|
||||
final int networkRpcTimeoutMs;
|
||||
final int networkRpcMaxRouteHopCount;
|
||||
final int? networkDhtResolveNodeTimeoutMs;
|
||||
final int networkDhtResolveNodeCount;
|
||||
final int networkDhtResolveNodeFanout;
|
||||
final int networkDhtMaxFindNodeCount;
|
||||
final int? networkDhtGetValueTimeoutMs;
|
||||
final int networkDhtGetValueCount;
|
||||
final int networkDhtGetValueFanout;
|
||||
final int? networkDhtSetValueTimeoutMs;
|
||||
final int networkDhtSetValueCount;
|
||||
final int networkDhtSetValueFanout;
|
||||
final int networkDhtMinPeerCount;
|
||||
final int networkDhtMinPeerRefreshTimeMs;
|
||||
final int networkDhtValidateDialInfoReceiptTimeMs;
|
||||
final bool networkProtocolUdpEnabled;
|
||||
final int networkProtocolUdpSocketPoolSize;
|
||||
final String networkProtocolUdpListenAddress;
|
||||
final String? networkProtocolUdpPublicAddress;
|
||||
final bool networkProtocolTcpConnect;
|
||||
final bool networkProtocolTcpListen;
|
||||
final int networkProtocolTcpMaxConnections;
|
||||
final String networkProtocolTcpListenAddress;
|
||||
final String? networkProtocolTcpPublicAddress;
|
||||
final bool networkProtocolWsConnect;
|
||||
final bool networkProtocolWsListen;
|
||||
final int networkProtocolWsMaxConnections;
|
||||
final String networkProtocolWsListenAddress;
|
||||
final String networkProtocolWsPath;
|
||||
final String? networkProtocolWsUrl;
|
||||
final bool networkProtocolWssConnect;
|
||||
final int networkProtocolWssMaxConnections;
|
||||
final int networkLeasesMaxServerSignalLeases;
|
||||
final int networkLeasesMaxServerRelayLeases;
|
||||
final int networkLeasesMaxClientSignalLeases;
|
||||
final int networkLeasesMaxClientRelayLeases;
|
||||
|
||||
VeilidConfig({
|
||||
required this.programName,
|
||||
required this.veilidNamespace,
|
||||
required this.apiLogLevel,
|
||||
required this.capabilitiesProtocolUdp,
|
||||
required this.capabilitiesProtocolConnectTcp,
|
||||
required this.capabilitiesProtocolAcceptTcp,
|
||||
required this.capabilitiesProtocolConnectWs,
|
||||
required this.capabilitiesProtocolAcceptWs,
|
||||
required this.capabilitiesProtocolConnectWss,
|
||||
required this.capabilitiesProtocolAcceptWss,
|
||||
required this.protectedStoreAllowInsecureFallback,
|
||||
required this.protectedStoreAlwaysUseInsecureStorage,
|
||||
required this.protectedStoreInsecureFallbackDirectory,
|
||||
required this.protectedStoreDelete,
|
||||
required this.tableStoreDirectory,
|
||||
required this.tableStoreDelete,
|
||||
required this.blockStoreDirectory,
|
||||
required this.blockStoreDelete,
|
||||
required this.networkMaxConnections,
|
||||
required this.networkConnectionInitialTimeoutMs,
|
||||
required this.networkNodeId,
|
||||
required this.networkNodeIdSecret,
|
||||
required this.networkBootstrap,
|
||||
required this.networkUpnp,
|
||||
required this.networkNatpmp,
|
||||
required this.networkEnableLocalPeerScope,
|
||||
required this.networkRestrictedNatRetries,
|
||||
required this.networkRpcConcurrency,
|
||||
required this.networkRpcQueueSize,
|
||||
this.networkRpcMaxTimestampBehindMs,
|
||||
this.networkRpcMaxTimestampAheadMs,
|
||||
required this.networkRpcTimeoutMs,
|
||||
required this.networkRpcMaxRouteHopCount,
|
||||
this.networkDhtResolveNodeTimeoutMs,
|
||||
required this.networkDhtResolveNodeCount,
|
||||
required this.networkDhtResolveNodeFanout,
|
||||
required this.networkDhtMaxFindNodeCount,
|
||||
this.networkDhtGetValueTimeoutMs,
|
||||
required this.networkDhtGetValueCount,
|
||||
required this.networkDhtGetValueFanout,
|
||||
this.networkDhtSetValueTimeoutMs,
|
||||
required this.networkDhtSetValueCount,
|
||||
required this.networkDhtSetValueFanout,
|
||||
required this.networkDhtMinPeerCount,
|
||||
required this.networkDhtMinPeerRefreshTimeMs,
|
||||
required this.networkDhtValidateDialInfoReceiptTimeMs,
|
||||
required this.networkProtocolUdpEnabled,
|
||||
required this.networkProtocolUdpSocketPoolSize,
|
||||
required this.networkProtocolUdpListenAddress,
|
||||
this.networkProtocolUdpPublicAddress,
|
||||
required this.networkProtocolTcpConnect,
|
||||
required this.networkProtocolTcpListen,
|
||||
required this.networkProtocolTcpMaxConnections,
|
||||
required this.networkProtocolTcpListenAddress,
|
||||
this.networkProtocolTcpPublicAddress,
|
||||
required this.networkProtocolWsConnect,
|
||||
required this.networkProtocolWsListen,
|
||||
required this.networkProtocolWsMaxConnections,
|
||||
required this.networkProtocolWsListenAddress,
|
||||
required this.networkProtocolWsPath,
|
||||
this.networkProtocolWsUrl,
|
||||
required this.networkProtocolWssConnect,
|
||||
required this.networkProtocolWssMaxConnections,
|
||||
required this.networkLeasesMaxServerSignalLeases,
|
||||
required this.networkLeasesMaxServerRelayLeases,
|
||||
required this.networkLeasesMaxClientSignalLeases,
|
||||
required this.networkLeasesMaxClientRelayLeases,
|
||||
});
|
||||
}
|
||||
|
||||
enum VeilidLogLevel {
|
||||
Error,
|
||||
Warn,
|
||||
Info,
|
||||
Debug,
|
||||
Trace,
|
||||
}
|
||||
|
||||
class VeilidState {
|
||||
final AttachmentState attachment;
|
||||
|
||||
VeilidState({
|
||||
required this.attachment,
|
||||
});
|
||||
}
|
||||
|
||||
@freezed
|
||||
class VeilidUpdate with _$VeilidUpdate {
|
||||
const factory VeilidUpdate.log({
|
||||
required VeilidLogLevel logLevel,
|
||||
required String message,
|
||||
}) = Log;
|
||||
const factory VeilidUpdate.attachment(
|
||||
AttachmentState field0,
|
||||
) = Attachment;
|
||||
}
|
||||
|
||||
class VeilidVersion {
|
||||
final int major;
|
||||
final int minor;
|
||||
final int patch;
|
||||
|
||||
VeilidVersion({
|
||||
required this.major,
|
||||
required this.minor,
|
||||
required this.patch,
|
||||
});
|
||||
}
|
||||
|
||||
class VeilidFlutterImpl extends FlutterRustBridgeBase<VeilidFlutterWire>
|
||||
implements VeilidFlutter {
|
||||
factory VeilidFlutterImpl(ffi.DynamicLibrary dylib) =>
|
||||
VeilidFlutterImpl.raw(VeilidFlutterWire(dylib));
|
||||
|
||||
VeilidFlutterImpl.raw(VeilidFlutterWire inner) : super(inner);
|
||||
|
||||
Stream<VeilidUpdate> startupVeilidCore(
|
||||
{required VeilidConfig config, dynamic hint}) =>
|
||||
executeStream(FlutterRustBridgeTask(
|
||||
callFfi: (port_) => inner.wire_startup_veilid_core(
|
||||
port_, _api2wire_box_autoadd_veilid_config(config)),
|
||||
parseSuccessData: _wire2api_veilid_update,
|
||||
constMeta: const FlutterRustBridgeTaskConstMeta(
|
||||
debugName: "startup_veilid_core",
|
||||
argNames: ["config"],
|
||||
),
|
||||
argValues: [config],
|
||||
hint: hint,
|
||||
));
|
||||
|
||||
Future<VeilidState> getVeilidState({dynamic hint}) =>
|
||||
executeNormal(FlutterRustBridgeTask(
|
||||
callFfi: (port_) => inner.wire_get_veilid_state(port_),
|
||||
parseSuccessData: _wire2api_veilid_state,
|
||||
constMeta: const FlutterRustBridgeTaskConstMeta(
|
||||
debugName: "get_veilid_state",
|
||||
argNames: [],
|
||||
),
|
||||
argValues: [],
|
||||
hint: hint,
|
||||
));
|
||||
|
||||
Future<void> changeApiLogLevel(
|
||||
{required VeilidLogLevel logLevel, dynamic hint}) =>
|
||||
executeNormal(FlutterRustBridgeTask(
|
||||
callFfi: (port_) => inner.wire_change_api_log_level(
|
||||
port_, _api2wire_veilid_log_level(logLevel)),
|
||||
parseSuccessData: _wire2api_unit,
|
||||
constMeta: const FlutterRustBridgeTaskConstMeta(
|
||||
debugName: "change_api_log_level",
|
||||
argNames: ["logLevel"],
|
||||
),
|
||||
argValues: [logLevel],
|
||||
hint: hint,
|
||||
));
|
||||
|
||||
Future<void> shutdownVeilidCore({dynamic hint}) =>
|
||||
executeNormal(FlutterRustBridgeTask(
|
||||
callFfi: (port_) => inner.wire_shutdown_veilid_core(port_),
|
||||
parseSuccessData: _wire2api_unit,
|
||||
constMeta: const FlutterRustBridgeTaskConstMeta(
|
||||
debugName: "shutdown_veilid_core",
|
||||
argNames: [],
|
||||
),
|
||||
argValues: [],
|
||||
hint: hint,
|
||||
));
|
||||
|
||||
Future<String> veilidVersionString({dynamic hint}) =>
|
||||
executeNormal(FlutterRustBridgeTask(
|
||||
callFfi: (port_) => inner.wire_veilid_version_string(port_),
|
||||
parseSuccessData: _wire2api_String,
|
||||
constMeta: const FlutterRustBridgeTaskConstMeta(
|
||||
debugName: "veilid_version_string",
|
||||
argNames: [],
|
||||
),
|
||||
argValues: [],
|
||||
hint: hint,
|
||||
));
|
||||
|
||||
Future<VeilidVersion> veilidVersion({dynamic hint}) =>
|
||||
executeNormal(FlutterRustBridgeTask(
|
||||
callFfi: (port_) => inner.wire_veilid_version(port_),
|
||||
parseSuccessData: _wire2api_veilid_version,
|
||||
constMeta: const FlutterRustBridgeTaskConstMeta(
|
||||
debugName: "veilid_version",
|
||||
argNames: [],
|
||||
),
|
||||
argValues: [],
|
||||
hint: hint,
|
||||
));
|
||||
|
||||
// Section: api2wire
|
||||
ffi.Pointer<wire_uint_8_list> _api2wire_String(String raw) {
|
||||
return _api2wire_uint_8_list(utf8.encoder.convert(raw));
|
||||
}
|
||||
|
||||
ffi.Pointer<wire_StringList> _api2wire_StringList(List<String> raw) {
|
||||
final ans = inner.new_StringList(raw.length);
|
||||
for (var i = 0; i < raw.length; i++) {
|
||||
ans.ref.ptr[i] = _api2wire_String(raw[i]);
|
||||
}
|
||||
return ans;
|
||||
}
|
||||
|
||||
int _api2wire_bool(bool raw) {
|
||||
return raw ? 1 : 0;
|
||||
}
|
||||
|
||||
ffi.Pointer<ffi.Uint32> _api2wire_box_autoadd_u32(int raw) {
|
||||
return inner.new_box_autoadd_u32(raw);
|
||||
}
|
||||
|
||||
ffi.Pointer<wire_VeilidConfig> _api2wire_box_autoadd_veilid_config(
|
||||
VeilidConfig raw) {
|
||||
final ptr = inner.new_box_autoadd_veilid_config();
|
||||
_api_fill_to_wire_veilid_config(raw, ptr.ref);
|
||||
return ptr;
|
||||
}
|
||||
|
||||
ffi.Pointer<wire_uint_8_list> _api2wire_opt_String(String? raw) {
|
||||
return raw == null ? ffi.nullptr : _api2wire_String(raw);
|
||||
}
|
||||
|
||||
ffi.Pointer<ffi.Uint32> _api2wire_opt_box_autoadd_u32(int? raw) {
|
||||
return raw == null ? ffi.nullptr : _api2wire_box_autoadd_u32(raw);
|
||||
}
|
||||
|
||||
int _api2wire_u32(int raw) {
|
||||
return raw;
|
||||
}
|
||||
|
||||
int _api2wire_u8(int raw) {
|
||||
return raw;
|
||||
}
|
||||
|
||||
ffi.Pointer<wire_uint_8_list> _api2wire_uint_8_list(Uint8List raw) {
|
||||
final ans = inner.new_uint_8_list(raw.length);
|
||||
ans.ref.ptr.asTypedList(raw.length).setAll(0, raw);
|
||||
return ans;
|
||||
}
|
||||
|
||||
int _api2wire_veilid_log_level(VeilidLogLevel raw) {
|
||||
return raw.index;
|
||||
}
|
||||
|
||||
// Section: api_fill_to_wire
|
||||
|
||||
void _api_fill_to_wire_box_autoadd_veilid_config(
|
||||
VeilidConfig apiObj, ffi.Pointer<wire_VeilidConfig> wireObj) {
|
||||
_api_fill_to_wire_veilid_config(apiObj, wireObj.ref);
|
||||
}
|
||||
|
||||
void _api_fill_to_wire_veilid_config(
|
||||
VeilidConfig apiObj, wire_VeilidConfig wireObj) {
|
||||
wireObj.program_name = _api2wire_String(apiObj.programName);
|
||||
wireObj.veilid_namespace = _api2wire_String(apiObj.veilidNamespace);
|
||||
wireObj.api_log_level = _api2wire_veilid_log_level(apiObj.apiLogLevel);
|
||||
wireObj.capabilities__protocol_udp =
|
||||
_api2wire_bool(apiObj.capabilitiesProtocolUdp);
|
||||
wireObj.capabilities__protocol_connect_tcp =
|
||||
_api2wire_bool(apiObj.capabilitiesProtocolConnectTcp);
|
||||
wireObj.capabilities__protocol_accept_tcp =
|
||||
_api2wire_bool(apiObj.capabilitiesProtocolAcceptTcp);
|
||||
wireObj.capabilities__protocol_connect_ws =
|
||||
_api2wire_bool(apiObj.capabilitiesProtocolConnectWs);
|
||||
wireObj.capabilities__protocol_accept_ws =
|
||||
_api2wire_bool(apiObj.capabilitiesProtocolAcceptWs);
|
||||
wireObj.capabilities__protocol_connect_wss =
|
||||
_api2wire_bool(apiObj.capabilitiesProtocolConnectWss);
|
||||
wireObj.capabilities__protocol_accept_wss =
|
||||
_api2wire_bool(apiObj.capabilitiesProtocolAcceptWss);
|
||||
wireObj.protected_store__allow_insecure_fallback =
|
||||
_api2wire_bool(apiObj.protectedStoreAllowInsecureFallback);
|
||||
wireObj.protected_store__always_use_insecure_storage =
|
||||
_api2wire_bool(apiObj.protectedStoreAlwaysUseInsecureStorage);
|
||||
wireObj.protected_store__insecure_fallback_directory =
|
||||
_api2wire_String(apiObj.protectedStoreInsecureFallbackDirectory);
|
||||
wireObj.protected_store__delete =
|
||||
_api2wire_bool(apiObj.protectedStoreDelete);
|
||||
wireObj.table_store__directory =
|
||||
_api2wire_String(apiObj.tableStoreDirectory);
|
||||
wireObj.table_store__delete = _api2wire_bool(apiObj.tableStoreDelete);
|
||||
wireObj.block_store__directory =
|
||||
_api2wire_String(apiObj.blockStoreDirectory);
|
||||
wireObj.block_store__delete = _api2wire_bool(apiObj.blockStoreDelete);
|
||||
wireObj.network__max_connections =
|
||||
_api2wire_u32(apiObj.networkMaxConnections);
|
||||
wireObj.network__connection_initial_timeout_ms =
|
||||
_api2wire_u32(apiObj.networkConnectionInitialTimeoutMs);
|
||||
wireObj.network__node_id = _api2wire_String(apiObj.networkNodeId);
|
||||
wireObj.network__node_id_secret =
|
||||
_api2wire_String(apiObj.networkNodeIdSecret);
|
||||
wireObj.network__bootstrap = _api2wire_StringList(apiObj.networkBootstrap);
|
||||
wireObj.network__upnp = _api2wire_bool(apiObj.networkUpnp);
|
||||
wireObj.network__natpmp = _api2wire_bool(apiObj.networkNatpmp);
|
||||
wireObj.network__enable_local_peer_scope =
|
||||
_api2wire_bool(apiObj.networkEnableLocalPeerScope);
|
||||
wireObj.network__restricted_nat_retries =
|
||||
_api2wire_u32(apiObj.networkRestrictedNatRetries);
|
||||
wireObj.network__rpc__concurrency =
|
||||
_api2wire_u32(apiObj.networkRpcConcurrency);
|
||||
wireObj.network__rpc__queue_size =
|
||||
_api2wire_u32(apiObj.networkRpcQueueSize);
|
||||
wireObj.network__rpc__max_timestamp_behind_ms =
|
||||
_api2wire_opt_box_autoadd_u32(apiObj.networkRpcMaxTimestampBehindMs);
|
||||
wireObj.network__rpc__max_timestamp_ahead_ms =
|
||||
_api2wire_opt_box_autoadd_u32(apiObj.networkRpcMaxTimestampAheadMs);
|
||||
wireObj.network__rpc__timeout_ms =
|
||||
_api2wire_u32(apiObj.networkRpcTimeoutMs);
|
||||
wireObj.network__rpc__max_route_hop_count =
|
||||
_api2wire_u8(apiObj.networkRpcMaxRouteHopCount);
|
||||
wireObj.network__dht__resolve_node_timeout_ms =
|
||||
_api2wire_opt_box_autoadd_u32(apiObj.networkDhtResolveNodeTimeoutMs);
|
||||
wireObj.network__dht__resolve_node_count =
|
||||
_api2wire_u32(apiObj.networkDhtResolveNodeCount);
|
||||
wireObj.network__dht__resolve_node_fanout =
|
||||
_api2wire_u32(apiObj.networkDhtResolveNodeFanout);
|
||||
wireObj.network__dht__max_find_node_count =
|
||||
_api2wire_u32(apiObj.networkDhtMaxFindNodeCount);
|
||||
wireObj.network__dht__get_value_timeout_ms =
|
||||
_api2wire_opt_box_autoadd_u32(apiObj.networkDhtGetValueTimeoutMs);
|
||||
wireObj.network__dht__get_value_count =
|
||||
_api2wire_u32(apiObj.networkDhtGetValueCount);
|
||||
wireObj.network__dht__get_value_fanout =
|
||||
_api2wire_u32(apiObj.networkDhtGetValueFanout);
|
||||
wireObj.network__dht__set_value_timeout_ms =
|
||||
_api2wire_opt_box_autoadd_u32(apiObj.networkDhtSetValueTimeoutMs);
|
||||
wireObj.network__dht__set_value_count =
|
||||
_api2wire_u32(apiObj.networkDhtSetValueCount);
|
||||
wireObj.network__dht__set_value_fanout =
|
||||
_api2wire_u32(apiObj.networkDhtSetValueFanout);
|
||||
wireObj.network__dht__min_peer_count =
|
||||
_api2wire_u32(apiObj.networkDhtMinPeerCount);
|
||||
wireObj.network__dht__min_peer_refresh_time_ms =
|
||||
_api2wire_u32(apiObj.networkDhtMinPeerRefreshTimeMs);
|
||||
wireObj.network__dht__validate_dial_info_receipt_time_ms =
|
||||
_api2wire_u32(apiObj.networkDhtValidateDialInfoReceiptTimeMs);
|
||||
wireObj.network__protocol__udp__enabled =
|
||||
_api2wire_bool(apiObj.networkProtocolUdpEnabled);
|
||||
wireObj.network__protocol__udp__socket_pool_size =
|
||||
_api2wire_u32(apiObj.networkProtocolUdpSocketPoolSize);
|
||||
wireObj.network__protocol__udp__listen_address =
|
||||
_api2wire_String(apiObj.networkProtocolUdpListenAddress);
|
||||
wireObj.network__protocol__udp__public_address =
|
||||
_api2wire_opt_String(apiObj.networkProtocolUdpPublicAddress);
|
||||
wireObj.network__protocol__tcp__connect =
|
||||
_api2wire_bool(apiObj.networkProtocolTcpConnect);
|
||||
wireObj.network__protocol__tcp__listen =
|
||||
_api2wire_bool(apiObj.networkProtocolTcpListen);
|
||||
wireObj.network__protocol__tcp__max_connections =
|
||||
_api2wire_u32(apiObj.networkProtocolTcpMaxConnections);
|
||||
wireObj.network__protocol__tcp__listen_address =
|
||||
_api2wire_String(apiObj.networkProtocolTcpListenAddress);
|
||||
wireObj.network__protocol__tcp__public_address =
|
||||
_api2wire_opt_String(apiObj.networkProtocolTcpPublicAddress);
|
||||
wireObj.network__protocol__ws__connect =
|
||||
_api2wire_bool(apiObj.networkProtocolWsConnect);
|
||||
wireObj.network__protocol__ws__listen =
|
||||
_api2wire_bool(apiObj.networkProtocolWsListen);
|
||||
wireObj.network__protocol__ws__max_connections =
|
||||
_api2wire_u32(apiObj.networkProtocolWsMaxConnections);
|
||||
wireObj.network__protocol__ws__listen_address =
|
||||
_api2wire_String(apiObj.networkProtocolWsListenAddress);
|
||||
wireObj.network__protocol__ws__path =
|
||||
_api2wire_String(apiObj.networkProtocolWsPath);
|
||||
wireObj.network__protocol__ws__url =
|
||||
_api2wire_opt_String(apiObj.networkProtocolWsUrl);
|
||||
wireObj.network__protocol__wss__connect =
|
||||
_api2wire_bool(apiObj.networkProtocolWssConnect);
|
||||
wireObj.network__protocol__wss__max_connections =
|
||||
_api2wire_u32(apiObj.networkProtocolWssMaxConnections);
|
||||
wireObj.network__leases__max_server_signal_leases =
|
||||
_api2wire_u32(apiObj.networkLeasesMaxServerSignalLeases);
|
||||
wireObj.network__leases__max_server_relay_leases =
|
||||
_api2wire_u32(apiObj.networkLeasesMaxServerRelayLeases);
|
||||
wireObj.network__leases__max_client_signal_leases =
|
||||
_api2wire_u32(apiObj.networkLeasesMaxClientSignalLeases);
|
||||
wireObj.network__leases__max_client_relay_leases =
|
||||
_api2wire_u32(apiObj.networkLeasesMaxClientRelayLeases);
|
||||
}
|
||||
}
|
||||
|
||||
// Section: wire2api
|
||||
String _wire2api_String(dynamic raw) {
|
||||
return raw as String;
|
||||
}
|
||||
|
||||
AttachmentState _wire2api_attachment_state(dynamic raw) {
|
||||
return AttachmentState.values[raw];
|
||||
}
|
||||
|
||||
int _wire2api_u32(dynamic raw) {
|
||||
return raw as int;
|
||||
}
|
||||
|
||||
int _wire2api_u8(dynamic raw) {
|
||||
return raw as int;
|
||||
}
|
||||
|
||||
Uint8List _wire2api_uint_8_list(dynamic raw) {
|
||||
return raw as Uint8List;
|
||||
}
|
||||
|
||||
void _wire2api_unit(dynamic raw) {
|
||||
return;
|
||||
}
|
||||
|
||||
VeilidLogLevel _wire2api_veilid_log_level(dynamic raw) {
|
||||
return VeilidLogLevel.values[raw];
|
||||
}
|
||||
|
||||
VeilidState _wire2api_veilid_state(dynamic raw) {
|
||||
final arr = raw as List<dynamic>;
|
||||
if (arr.length != 1)
|
||||
throw Exception('unexpected arr length: expect 1 but see ${arr.length}');
|
||||
return VeilidState(
|
||||
attachment: _wire2api_attachment_state(arr[0]),
|
||||
);
|
||||
}
|
||||
|
||||
VeilidUpdate _wire2api_veilid_update(dynamic raw) {
|
||||
switch (raw[0]) {
|
||||
case 0:
|
||||
return Log(
|
||||
logLevel: _wire2api_veilid_log_level(raw[1]),
|
||||
message: _wire2api_String(raw[2]),
|
||||
);
|
||||
case 1:
|
||||
return Attachment(
|
||||
_wire2api_attachment_state(raw[1]),
|
||||
);
|
||||
default:
|
||||
throw Exception("unreachable");
|
||||
}
|
||||
}
|
||||
|
||||
VeilidVersion _wire2api_veilid_version(dynamic raw) {
|
||||
final arr = raw as List<dynamic>;
|
||||
if (arr.length != 3)
|
||||
throw Exception('unexpected arr length: expect 3 but see ${arr.length}');
|
||||
return VeilidVersion(
|
||||
major: _wire2api_u32(arr[0]),
|
||||
minor: _wire2api_u32(arr[1]),
|
||||
patch: _wire2api_u32(arr[2]),
|
||||
);
|
||||
}
|
||||
|
||||
// ignore_for_file: camel_case_types, non_constant_identifier_names, avoid_positional_boolean_parameters, annotate_overrides, constant_identifier_names
|
||||
|
||||
// AUTO GENERATED FILE, DO NOT EDIT.
|
||||
//
|
||||
// Generated by `package:ffigen`.
|
||||
|
||||
/// generated by flutter_rust_bridge
|
||||
class VeilidFlutterWire implements FlutterRustBridgeWireBase {
|
||||
/// Holds the symbol lookup function.
|
||||
final ffi.Pointer<T> Function<T extends ffi.NativeType>(String symbolName)
|
||||
_lookup;
|
||||
|
||||
/// The symbols are looked up in [dynamicLibrary].
|
||||
VeilidFlutterWire(ffi.DynamicLibrary dynamicLibrary)
|
||||
: _lookup = dynamicLibrary.lookup;
|
||||
|
||||
/// The symbols are looked up with [lookup].
|
||||
VeilidFlutterWire.fromLookup(
|
||||
ffi.Pointer<T> Function<T extends ffi.NativeType>(String symbolName)
|
||||
lookup)
|
||||
: _lookup = lookup;
|
||||
|
||||
void wire_startup_veilid_core(
|
||||
int port_,
|
||||
ffi.Pointer<wire_VeilidConfig> config,
|
||||
) {
|
||||
return _wire_startup_veilid_core(
|
||||
port_,
|
||||
config,
|
||||
);
|
||||
}
|
||||
|
||||
late final _wire_startup_veilid_corePtr = _lookup<
|
||||
ffi.NativeFunction<
|
||||
ffi.Void Function(ffi.Int64,
|
||||
ffi.Pointer<wire_VeilidConfig>)>>('wire_startup_veilid_core');
|
||||
late final _wire_startup_veilid_core = _wire_startup_veilid_corePtr
|
||||
.asFunction<void Function(int, ffi.Pointer<wire_VeilidConfig>)>();
|
||||
|
||||
void wire_get_veilid_state(
|
||||
int port_,
|
||||
) {
|
||||
return _wire_get_veilid_state(
|
||||
port_,
|
||||
);
|
||||
}
|
||||
|
||||
late final _wire_get_veilid_statePtr =
|
||||
_lookup<ffi.NativeFunction<ffi.Void Function(ffi.Int64)>>(
|
||||
'wire_get_veilid_state');
|
||||
late final _wire_get_veilid_state =
|
||||
_wire_get_veilid_statePtr.asFunction<void Function(int)>();
|
||||
|
||||
void wire_change_api_log_level(
|
||||
int port_,
|
||||
int log_level,
|
||||
) {
|
||||
return _wire_change_api_log_level(
|
||||
port_,
|
||||
log_level,
|
||||
);
|
||||
}
|
||||
|
||||
late final _wire_change_api_log_levelPtr =
|
||||
_lookup<ffi.NativeFunction<ffi.Void Function(ffi.Int64, ffi.Int32)>>(
|
||||
'wire_change_api_log_level');
|
||||
late final _wire_change_api_log_level =
|
||||
_wire_change_api_log_levelPtr.asFunction<void Function(int, int)>();
|
||||
|
||||
void wire_shutdown_veilid_core(
|
||||
int port_,
|
||||
) {
|
||||
return _wire_shutdown_veilid_core(
|
||||
port_,
|
||||
);
|
||||
}
|
||||
|
||||
late final _wire_shutdown_veilid_corePtr =
|
||||
_lookup<ffi.NativeFunction<ffi.Void Function(ffi.Int64)>>(
|
||||
'wire_shutdown_veilid_core');
|
||||
late final _wire_shutdown_veilid_core =
|
||||
_wire_shutdown_veilid_corePtr.asFunction<void Function(int)>();
|
||||
|
||||
void wire_veilid_version_string(
|
||||
int port_,
|
||||
) {
|
||||
return _wire_veilid_version_string(
|
||||
port_,
|
||||
);
|
||||
}
|
||||
|
||||
late final _wire_veilid_version_stringPtr =
|
||||
_lookup<ffi.NativeFunction<ffi.Void Function(ffi.Int64)>>(
|
||||
'wire_veilid_version_string');
|
||||
late final _wire_veilid_version_string =
|
||||
_wire_veilid_version_stringPtr.asFunction<void Function(int)>();
|
||||
|
||||
void wire_veilid_version(
|
||||
int port_,
|
||||
) {
|
||||
return _wire_veilid_version(
|
||||
port_,
|
||||
);
|
||||
}
|
||||
|
||||
late final _wire_veilid_versionPtr =
|
||||
_lookup<ffi.NativeFunction<ffi.Void Function(ffi.Int64)>>(
|
||||
'wire_veilid_version');
|
||||
late final _wire_veilid_version =
|
||||
_wire_veilid_versionPtr.asFunction<void Function(int)>();
|
||||
|
||||
ffi.Pointer<wire_StringList> new_StringList(
|
||||
int len,
|
||||
) {
|
||||
return _new_StringList(
|
||||
len,
|
||||
);
|
||||
}
|
||||
|
||||
late final _new_StringListPtr = _lookup<
|
||||
ffi.NativeFunction<ffi.Pointer<wire_StringList> Function(ffi.Int32)>>(
|
||||
'new_StringList');
|
||||
late final _new_StringList = _new_StringListPtr
|
||||
.asFunction<ffi.Pointer<wire_StringList> Function(int)>();
|
||||
|
||||
ffi.Pointer<ffi.Uint32> new_box_autoadd_u32(
|
||||
int value,
|
||||
) {
|
||||
return _new_box_autoadd_u32(
|
||||
value,
|
||||
);
|
||||
}
|
||||
|
||||
late final _new_box_autoadd_u32Ptr =
|
||||
_lookup<ffi.NativeFunction<ffi.Pointer<ffi.Uint32> Function(ffi.Uint32)>>(
|
||||
'new_box_autoadd_u32');
|
||||
late final _new_box_autoadd_u32 = _new_box_autoadd_u32Ptr
|
||||
.asFunction<ffi.Pointer<ffi.Uint32> Function(int)>();
|
||||
|
||||
ffi.Pointer<wire_VeilidConfig> new_box_autoadd_veilid_config() {
|
||||
return _new_box_autoadd_veilid_config();
|
||||
}
|
||||
|
||||
late final _new_box_autoadd_veilid_configPtr =
|
||||
_lookup<ffi.NativeFunction<ffi.Pointer<wire_VeilidConfig> Function()>>(
|
||||
'new_box_autoadd_veilid_config');
|
||||
late final _new_box_autoadd_veilid_config = _new_box_autoadd_veilid_configPtr
|
||||
.asFunction<ffi.Pointer<wire_VeilidConfig> Function()>();
|
||||
|
||||
ffi.Pointer<wire_uint_8_list> new_uint_8_list(
|
||||
int len,
|
||||
) {
|
||||
return _new_uint_8_list(
|
||||
len,
|
||||
);
|
||||
}
|
||||
|
||||
late final _new_uint_8_listPtr = _lookup<
|
||||
ffi.NativeFunction<
|
||||
ffi.Pointer<wire_uint_8_list> Function(
|
||||
ffi.Int32)>>('new_uint_8_list');
|
||||
late final _new_uint_8_list = _new_uint_8_listPtr
|
||||
.asFunction<ffi.Pointer<wire_uint_8_list> Function(int)>();
|
||||
|
||||
void free_WireSyncReturnStruct(
|
||||
WireSyncReturnStruct val,
|
||||
) {
|
||||
return _free_WireSyncReturnStruct(
|
||||
val,
|
||||
);
|
||||
}
|
||||
|
||||
late final _free_WireSyncReturnStructPtr =
|
||||
_lookup<ffi.NativeFunction<ffi.Void Function(WireSyncReturnStruct)>>(
|
||||
'free_WireSyncReturnStruct');
|
||||
late final _free_WireSyncReturnStruct = _free_WireSyncReturnStructPtr
|
||||
.asFunction<void Function(WireSyncReturnStruct)>();
|
||||
|
||||
void store_dart_post_cobject(
|
||||
DartPostCObjectFnType ptr,
|
||||
) {
|
||||
return _store_dart_post_cobject(
|
||||
ptr,
|
||||
);
|
||||
}
|
||||
|
||||
late final _store_dart_post_cobjectPtr =
|
||||
_lookup<ffi.NativeFunction<ffi.Void Function(DartPostCObjectFnType)>>(
|
||||
'store_dart_post_cobject');
|
||||
late final _store_dart_post_cobject = _store_dart_post_cobjectPtr
|
||||
.asFunction<void Function(DartPostCObjectFnType)>();
|
||||
}
|
||||
|
||||
class wire_uint_8_list extends ffi.Struct {
|
||||
external ffi.Pointer<ffi.Uint8> ptr;
|
||||
|
||||
@ffi.Int32()
|
||||
external int len;
|
||||
}
|
||||
|
||||
class wire_StringList extends ffi.Struct {
|
||||
external ffi.Pointer<ffi.Pointer<wire_uint_8_list>> ptr;
|
||||
|
||||
@ffi.Int32()
|
||||
external int len;
|
||||
}
|
||||
|
||||
class wire_VeilidConfig extends ffi.Struct {
|
||||
external ffi.Pointer<wire_uint_8_list> program_name;
|
||||
|
||||
external ffi.Pointer<wire_uint_8_list> veilid_namespace;
|
||||
|
||||
@ffi.Int32()
|
||||
external int api_log_level;
|
||||
|
||||
@ffi.Uint8()
|
||||
external int capabilities__protocol_udp;
|
||||
|
||||
@ffi.Uint8()
|
||||
external int capabilities__protocol_connect_tcp;
|
||||
|
||||
@ffi.Uint8()
|
||||
external int capabilities__protocol_accept_tcp;
|
||||
|
||||
@ffi.Uint8()
|
||||
external int capabilities__protocol_connect_ws;
|
||||
|
||||
@ffi.Uint8()
|
||||
external int capabilities__protocol_accept_ws;
|
||||
|
||||
@ffi.Uint8()
|
||||
external int capabilities__protocol_connect_wss;
|
||||
|
||||
@ffi.Uint8()
|
||||
external int capabilities__protocol_accept_wss;
|
||||
|
||||
@ffi.Uint8()
|
||||
external int protected_store__allow_insecure_fallback;
|
||||
|
||||
@ffi.Uint8()
|
||||
external int protected_store__always_use_insecure_storage;
|
||||
|
||||
external ffi.Pointer<wire_uint_8_list>
|
||||
protected_store__insecure_fallback_directory;
|
||||
|
||||
@ffi.Uint8()
|
||||
external int protected_store__delete;
|
||||
|
||||
external ffi.Pointer<wire_uint_8_list> table_store__directory;
|
||||
|
||||
@ffi.Uint8()
|
||||
external int table_store__delete;
|
||||
|
||||
external ffi.Pointer<wire_uint_8_list> block_store__directory;
|
||||
|
||||
@ffi.Uint8()
|
||||
external int block_store__delete;
|
||||
|
||||
@ffi.Uint32()
|
||||
external int network__max_connections;
|
||||
|
||||
@ffi.Uint32()
|
||||
external int network__connection_initial_timeout_ms;
|
||||
|
||||
external ffi.Pointer<wire_uint_8_list> network__node_id;
|
||||
|
||||
external ffi.Pointer<wire_uint_8_list> network__node_id_secret;
|
||||
|
||||
external ffi.Pointer<wire_StringList> network__bootstrap;
|
||||
|
||||
@ffi.Uint8()
|
||||
external int network__upnp;
|
||||
|
||||
@ffi.Uint8()
|
||||
external int network__natpmp;
|
||||
|
||||
@ffi.Uint8()
|
||||
external int network__enable_local_peer_scope;
|
||||
|
||||
@ffi.Uint32()
|
||||
external int network__restricted_nat_retries;
|
||||
|
||||
@ffi.Uint32()
|
||||
external int network__rpc__concurrency;
|
||||
|
||||
@ffi.Uint32()
|
||||
external int network__rpc__queue_size;
|
||||
|
||||
external ffi.Pointer<ffi.Uint32> network__rpc__max_timestamp_behind_ms;
|
||||
|
||||
external ffi.Pointer<ffi.Uint32> network__rpc__max_timestamp_ahead_ms;
|
||||
|
||||
@ffi.Uint32()
|
||||
external int network__rpc__timeout_ms;
|
||||
|
||||
@ffi.Uint8()
|
||||
external int network__rpc__max_route_hop_count;
|
||||
|
||||
external ffi.Pointer<ffi.Uint32> network__dht__resolve_node_timeout_ms;
|
||||
|
||||
@ffi.Uint32()
|
||||
external int network__dht__resolve_node_count;
|
||||
|
||||
@ffi.Uint32()
|
||||
external int network__dht__resolve_node_fanout;
|
||||
|
||||
@ffi.Uint32()
|
||||
external int network__dht__max_find_node_count;
|
||||
|
||||
external ffi.Pointer<ffi.Uint32> network__dht__get_value_timeout_ms;
|
||||
|
||||
@ffi.Uint32()
|
||||
external int network__dht__get_value_count;
|
||||
|
||||
@ffi.Uint32()
|
||||
external int network__dht__get_value_fanout;
|
||||
|
||||
external ffi.Pointer<ffi.Uint32> network__dht__set_value_timeout_ms;
|
||||
|
||||
@ffi.Uint32()
|
||||
external int network__dht__set_value_count;
|
||||
|
||||
@ffi.Uint32()
|
||||
external int network__dht__set_value_fanout;
|
||||
|
||||
@ffi.Uint32()
|
||||
external int network__dht__min_peer_count;
|
||||
|
||||
@ffi.Uint32()
|
||||
external int network__dht__min_peer_refresh_time_ms;
|
||||
|
||||
@ffi.Uint32()
|
||||
external int network__dht__validate_dial_info_receipt_time_ms;
|
||||
|
||||
@ffi.Uint8()
|
||||
external int network__protocol__udp__enabled;
|
||||
|
||||
@ffi.Uint32()
|
||||
external int network__protocol__udp__socket_pool_size;
|
||||
|
||||
external ffi.Pointer<wire_uint_8_list> network__protocol__udp__listen_address;
|
||||
|
||||
external ffi.Pointer<wire_uint_8_list> network__protocol__udp__public_address;
|
||||
|
||||
@ffi.Uint8()
|
||||
external int network__protocol__tcp__connect;
|
||||
|
||||
@ffi.Uint8()
|
||||
external int network__protocol__tcp__listen;
|
||||
|
||||
@ffi.Uint32()
|
||||
external int network__protocol__tcp__max_connections;
|
||||
|
||||
external ffi.Pointer<wire_uint_8_list> network__protocol__tcp__listen_address;
|
||||
|
||||
external ffi.Pointer<wire_uint_8_list> network__protocol__tcp__public_address;
|
||||
|
||||
@ffi.Uint8()
|
||||
external int network__protocol__ws__connect;
|
||||
|
||||
@ffi.Uint8()
|
||||
external int network__protocol__ws__listen;
|
||||
|
||||
@ffi.Uint32()
|
||||
external int network__protocol__ws__max_connections;
|
||||
|
||||
external ffi.Pointer<wire_uint_8_list> network__protocol__ws__listen_address;
|
||||
|
||||
external ffi.Pointer<wire_uint_8_list> network__protocol__ws__path;
|
||||
|
||||
external ffi.Pointer<wire_uint_8_list> network__protocol__ws__url;
|
||||
|
||||
@ffi.Uint8()
|
||||
external int network__protocol__wss__connect;
|
||||
|
||||
@ffi.Uint32()
|
||||
external int network__protocol__wss__max_connections;
|
||||
|
||||
@ffi.Uint32()
|
||||
external int network__leases__max_server_signal_leases;
|
||||
|
||||
@ffi.Uint32()
|
||||
external int network__leases__max_server_relay_leases;
|
||||
|
||||
@ffi.Uint32()
|
||||
external int network__leases__max_client_signal_leases;
|
||||
|
||||
@ffi.Uint32()
|
||||
external int network__leases__max_client_relay_leases;
|
||||
}
|
||||
|
||||
typedef DartPostCObjectFnType = ffi.Pointer<
|
||||
ffi.NativeFunction<ffi.Uint8 Function(DartPort, ffi.Pointer<ffi.Void>)>>;
|
||||
typedef DartPort = ffi.Int64;
|
@@ -1,69 +1,336 @@
|
||||
import 'dart:async';
|
||||
import 'dart:typed_data';
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:oxidized/oxidized.dart';
|
||||
import 'package:change_case/change_case.dart';
|
||||
|
||||
import 'veilid_stub.dart'
|
||||
if (dart.library.io) 'veilid_ffi.dart'
|
||||
if (dart.library.js) 'veilid_js.dart';
|
||||
if (dart.library.io) 'veilid_ffi.dart'
|
||||
if (dart.library.js) 'veilid_js.dart';
|
||||
|
||||
//////////////////////////////////////////////////////////
|
||||
|
||||
enum AttachmentState {
|
||||
Detached,
|
||||
Attaching,
|
||||
AttachedWeak,
|
||||
AttachedGood,
|
||||
AttachedStrong,
|
||||
FullyAttached,
|
||||
OverAttached,
|
||||
Detaching,
|
||||
//////////////////////////////////////
|
||||
/// JSON Encode Helper
|
||||
Object? veilidApiToEncodable(Object? value) {
|
||||
if (value == null) {
|
||||
return value;
|
||||
}
|
||||
switch (value.runtimeType) {
|
||||
case AttachmentState:
|
||||
return (value as AttachmentState).json;
|
||||
case VeilidLogLevel:
|
||||
return (value as VeilidLogLevel).json;
|
||||
}
|
||||
throw UnsupportedError('Cannot convert to JSON: $value');
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
/// AttachmentState
|
||||
|
||||
enum AttachmentState {
|
||||
detached,
|
||||
attaching,
|
||||
attachedWeak,
|
||||
attachedGood,
|
||||
attachedStrong,
|
||||
fullyAttached,
|
||||
overAttached,
|
||||
detaching,
|
||||
}
|
||||
|
||||
extension AttachmentStateExt on AttachmentState {
|
||||
String get json {
|
||||
return name.toPascalCase();
|
||||
}
|
||||
}
|
||||
|
||||
AttachmentState attachmentStateFromJson(String j) {
|
||||
return AttachmentState.values.byName(j.toCamelCase());
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
/// VeilidLogLevel
|
||||
|
||||
enum VeilidLogLevel {
|
||||
Error,
|
||||
Warn,
|
||||
Info,
|
||||
Debug,
|
||||
Trace,
|
||||
error,
|
||||
warn,
|
||||
info,
|
||||
debug,
|
||||
trace,
|
||||
}
|
||||
|
||||
// VeilidVersion
|
||||
extension VeilidLogLevelExt on VeilidLogLevel {
|
||||
String get json {
|
||||
return name.toPascalCase();
|
||||
}
|
||||
}
|
||||
|
||||
class VeilidVersion {
|
||||
final int major;
|
||||
final int minor;
|
||||
final int patch;
|
||||
VeilidLogLevel veilidLogLevelFromJson(String j) {
|
||||
return VeilidLogLevel.values.byName(j.toCamelCase());
|
||||
}
|
||||
|
||||
VeilidVersion({
|
||||
required this.major,
|
||||
required this.minor,
|
||||
required this.patch,
|
||||
//////////////////////////////////////
|
||||
/// VeilidConfig
|
||||
|
||||
class VeilidConfig {
|
||||
String programName;
|
||||
String veilidNamespace;
|
||||
VeilidLogLevel apiLogLevel;
|
||||
bool capabilitiesProtocolUdp;
|
||||
bool capabilitiesProtocolConnectTcp;
|
||||
bool capabilitiesProtocolAcceptTcp;
|
||||
bool capabilitiesProtocolConnectWs;
|
||||
bool capabilitiesProtocolAcceptWs;
|
||||
bool capabilitiesProtocolConnectWss;
|
||||
bool capabilitiesProtocolAcceptWss;
|
||||
bool protectedStoreAllowInsecureFallback;
|
||||
bool protectedStoreAlwaysUseInsecureStorage;
|
||||
String protectedStoreInsecureFallbackDirectory;
|
||||
bool protectedStoreDelete;
|
||||
String tableStoreDirectory;
|
||||
bool tableStoreDelete;
|
||||
String blockStoreDirectory;
|
||||
bool blockStoreDelete;
|
||||
int networkMaxConnections;
|
||||
int networkConnectionInitialTimeoutMs;
|
||||
String networkNodeId;
|
||||
String networkNodeIdSecret;
|
||||
List<String> networkBootstrap;
|
||||
bool networkUpnp;
|
||||
bool networkNatpmp;
|
||||
bool networkEnableLocalPeerScope;
|
||||
int networkRestrictedNatRetries;
|
||||
int networkRpcConcurrency;
|
||||
int networkRpcQueueSize;
|
||||
int? networkRpcMaxTimestampBehindMs;
|
||||
int? networkRpcMaxTimestampAheadMs;
|
||||
int networkRpcTimeoutMs;
|
||||
int networkRpcMaxRouteHopCount;
|
||||
int? networkDhtResolveNodeTimeoutMs;
|
||||
int networkDhtResolveNodeCount;
|
||||
int networkDhtResolveNodeFanout;
|
||||
int networkDhtMaxFindNodeCount;
|
||||
int? networkDhtGetValueTimeoutMs;
|
||||
int networkDhtGetValueCount;
|
||||
int networkDhtGetValueFanout;
|
||||
int? networkDhtSetValueTimeoutMs;
|
||||
int networkDhtSetValueCount;
|
||||
int networkDhtSetValueFanout;
|
||||
int networkDhtMinPeerCount;
|
||||
int networkDhtMinPeerRefreshTimeMs;
|
||||
int networkDhtValidateDialInfoReceiptTimeMs;
|
||||
bool networkProtocolUdpEnabled;
|
||||
int networkProtocolUdpSocketPoolSize;
|
||||
String networkProtocolUdpListenAddress;
|
||||
String? networkProtocolUdpPublicAddress;
|
||||
bool networkProtocolTcpConnect;
|
||||
bool networkProtocolTcpListen;
|
||||
int networkProtocolTcpMaxConnections;
|
||||
String networkProtocolTcpListenAddress;
|
||||
String? networkProtocolTcpPublicAddress;
|
||||
bool networkProtocolWsConnect;
|
||||
bool networkProtocolWsListen;
|
||||
int networkProtocolWsMaxConnections;
|
||||
String networkProtocolWsListenAddress;
|
||||
String networkProtocolWsPath;
|
||||
String? networkProtocolWsUrl;
|
||||
bool networkProtocolWssConnect;
|
||||
int networkProtocolWssMaxConnections;
|
||||
int networkLeasesMaxServerSignalLeases;
|
||||
int networkLeasesMaxServerRelayLeases;
|
||||
int networkLeasesMaxClientSignalLeases;
|
||||
int networkLeasesMaxClientRelayLeases;
|
||||
|
||||
VeilidConfig({
|
||||
required this.programName,
|
||||
required this.veilidNamespace,
|
||||
required this.apiLogLevel,
|
||||
required this.capabilitiesProtocolUdp,
|
||||
required this.capabilitiesProtocolConnectTcp,
|
||||
required this.capabilitiesProtocolAcceptTcp,
|
||||
required this.capabilitiesProtocolConnectWs,
|
||||
required this.capabilitiesProtocolAcceptWs,
|
||||
required this.capabilitiesProtocolConnectWss,
|
||||
required this.capabilitiesProtocolAcceptWss,
|
||||
required this.protectedStoreAllowInsecureFallback,
|
||||
required this.protectedStoreAlwaysUseInsecureStorage,
|
||||
required this.protectedStoreInsecureFallbackDirectory,
|
||||
required this.protectedStoreDelete,
|
||||
required this.tableStoreDirectory,
|
||||
required this.tableStoreDelete,
|
||||
required this.blockStoreDirectory,
|
||||
required this.blockStoreDelete,
|
||||
required this.networkMaxConnections,
|
||||
required this.networkConnectionInitialTimeoutMs,
|
||||
required this.networkNodeId,
|
||||
required this.networkNodeIdSecret,
|
||||
required this.networkBootstrap,
|
||||
required this.networkUpnp,
|
||||
required this.networkNatpmp,
|
||||
required this.networkEnableLocalPeerScope,
|
||||
required this.networkRestrictedNatRetries,
|
||||
required this.networkRpcConcurrency,
|
||||
required this.networkRpcQueueSize,
|
||||
this.networkRpcMaxTimestampBehindMs,
|
||||
this.networkRpcMaxTimestampAheadMs,
|
||||
required this.networkRpcTimeoutMs,
|
||||
required this.networkRpcMaxRouteHopCount,
|
||||
this.networkDhtResolveNodeTimeoutMs,
|
||||
required this.networkDhtResolveNodeCount,
|
||||
required this.networkDhtResolveNodeFanout,
|
||||
required this.networkDhtMaxFindNodeCount,
|
||||
this.networkDhtGetValueTimeoutMs,
|
||||
required this.networkDhtGetValueCount,
|
||||
required this.networkDhtGetValueFanout,
|
||||
this.networkDhtSetValueTimeoutMs,
|
||||
required this.networkDhtSetValueCount,
|
||||
required this.networkDhtSetValueFanout,
|
||||
required this.networkDhtMinPeerCount,
|
||||
required this.networkDhtMinPeerRefreshTimeMs,
|
||||
required this.networkDhtValidateDialInfoReceiptTimeMs,
|
||||
required this.networkProtocolUdpEnabled,
|
||||
required this.networkProtocolUdpSocketPoolSize,
|
||||
required this.networkProtocolUdpListenAddress,
|
||||
this.networkProtocolUdpPublicAddress,
|
||||
required this.networkProtocolTcpConnect,
|
||||
required this.networkProtocolTcpListen,
|
||||
required this.networkProtocolTcpMaxConnections,
|
||||
required this.networkProtocolTcpListenAddress,
|
||||
this.networkProtocolTcpPublicAddress,
|
||||
required this.networkProtocolWsConnect,
|
||||
required this.networkProtocolWsListen,
|
||||
required this.networkProtocolWsMaxConnections,
|
||||
required this.networkProtocolWsListenAddress,
|
||||
required this.networkProtocolWsPath,
|
||||
this.networkProtocolWsUrl,
|
||||
required this.networkProtocolWssConnect,
|
||||
required this.networkProtocolWssMaxConnections,
|
||||
required this.networkLeasesMaxServerSignalLeases,
|
||||
required this.networkLeasesMaxServerRelayLeases,
|
||||
required this.networkLeasesMaxClientSignalLeases,
|
||||
required this.networkLeasesMaxClientRelayLeases,
|
||||
});
|
||||
|
||||
String get json {
|
||||
return "";
|
||||
}
|
||||
|
||||
factory VeilidConfig.fromJson(String json) {
|
||||
var parsed = jsonDecode(json);
|
||||
VeilidConfig({
|
||||
programName: parsed["program_name"],
|
||||
veilidNamespace: parsed["veilid_namespace"],
|
||||
apiLogLevel: veilidLogLevelFromJson(parsed["api_log_level"]),
|
||||
capabilitiesProtocolUdp: parsed["capabilities__protocol_udp"],
|
||||
capabilitiesProtocolConnectTcp: parsed["capabilities__protocol_connect_tcp"],
|
||||
capabilitiesProtocolAcceptTcp: parsed["capabilities__protocol_accept_tcp"],
|
||||
capabilitiesProtocolConnectWs: parsed["capabilities__protocol_connect_ws"],
|
||||
capabilitiesProtocolAcceptWs: parsed["capabilities__protocol_accept_ws"],
|
||||
capabilitiesProtocolConnectWss: parsed["capabilities__protocol_connect_wss"]
|
||||
// required this.capabilitiesProtocolAcceptWss,
|
||||
// required this.protectedStoreAllowInsecureFallback,
|
||||
// required this.protectedStoreAlwaysUseInsecureStorage,
|
||||
// required this.protectedStoreInsecureFallbackDirectory,
|
||||
// required this.protectedStoreDelete,
|
||||
// required this.tableStoreDirectory,
|
||||
// required this.tableStoreDelete,
|
||||
// required this.blockStoreDirectory,
|
||||
// required this.blockStoreDelete,
|
||||
// required this.networkMaxConnections,
|
||||
// required this.networkConnectionInitialTimeoutMs,
|
||||
// required this.networkNodeId,
|
||||
// required this.networkNodeIdSecret,
|
||||
// required this.networkBootstrap,
|
||||
// required this.networkUpnp,
|
||||
// required this.networkNatpmp,
|
||||
// required this.networkEnableLocalPeerScope,
|
||||
// required this.networkRestrictedNatRetries,
|
||||
// required this.networkRpcConcurrency,
|
||||
// required this.networkRpcQueueSize,
|
||||
// this.networkRpcMaxTimestampBehindMs,
|
||||
// this.networkRpcMaxTimestampAheadMs,
|
||||
// required this.networkRpcTimeoutMs,
|
||||
// required this.networkRpcMaxRouteHopCount,
|
||||
// this.networkDhtResolveNodeTimeoutMs,
|
||||
// required this.networkDhtResolveNodeCount,
|
||||
// required this.networkDhtResolveNodeFanout,
|
||||
// required this.networkDhtMaxFindNodeCount,
|
||||
// this.networkDhtGetValueTimeoutMs,
|
||||
// required this.networkDhtGetValueCount,
|
||||
// required this.networkDhtGetValueFanout,
|
||||
// this.networkDhtSetValueTimeoutMs,
|
||||
// required this.networkDhtSetValueCount,
|
||||
// required this.networkDhtSetValueFanout,
|
||||
// required this.networkDhtMinPeerCount,
|
||||
// required this.networkDhtMinPeerRefreshTimeMs,
|
||||
// required this.networkDhtValidateDialInfoReceiptTimeMs,
|
||||
// required this.networkProtocolUdpEnabled,
|
||||
// required this.networkProtocolUdpSocketPoolSize,
|
||||
// required this.networkProtocolUdpListenAddress,
|
||||
// this.networkProtocolUdpPublicAddress,
|
||||
// required this.networkProtocolTcpConnect,
|
||||
// required this.networkProtocolTcpListen,
|
||||
// required this.networkProtocolTcpMaxConnections,
|
||||
// required this.networkProtocolTcpListenAddress,
|
||||
// this.networkProtocolTcpPublicAddress,
|
||||
// required this.networkProtocolWsConnect,
|
||||
// required this.networkProtocolWsListen,
|
||||
// required this.networkProtocolWsMaxConnections,
|
||||
// required this.networkProtocolWsListenAddress,
|
||||
// required this.networkProtocolWsPath,
|
||||
// this.networkProtocolWsUrl,
|
||||
// required this.networkProtocolWssConnect,
|
||||
// required this.networkProtocolWssMaxConnections,
|
||||
// required this.networkLeasesMaxServerSignalLeases,
|
||||
// required this.networkLeasesMaxServerRelayLeases,
|
||||
// required this.networkLeasesMaxClientSignalLeases,
|
||||
// required this.networkLeasesMaxClientRelayLeases,
|
||||
})
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// VeilidUpdate
|
||||
//////////////////////////////////////
|
||||
/// VeilidUpdate
|
||||
|
||||
abstract class VeilidUpdate {
|
||||
VeilidUpdateKind get kind;
|
||||
factory VeilidUpdate.fromJson(String json) {
|
||||
var parsed = jsonDecode(json);
|
||||
switch (parsed["kind"]) {
|
||||
case "Log":
|
||||
{
|
||||
return VeilidUpdateLog(
|
||||
veilidLogLevelFromJson(parsed["log_level"]), parsed["message"]);
|
||||
}
|
||||
case "Attachment":
|
||||
{
|
||||
return VeilidUpdateAttachment(
|
||||
attachmentStateFromJson(parsed["state"]));
|
||||
}
|
||||
default:
|
||||
{
|
||||
throw VeilidAPIExceptionInternal(
|
||||
"Invalid VeilidAPIException type: ${parsed['kind']}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class VeilidUpdateLog implements VeilidUpdate {
|
||||
final VeilidLogLevel logLevel;
|
||||
final String message;
|
||||
|
||||
//
|
||||
VeilidUpdateLog(this.logLevel, this.message);
|
||||
}
|
||||
|
||||
class VeilidUpdateAttachment implements VeilidUpdate {
|
||||
final AttachmentState state;
|
||||
|
||||
//
|
||||
VeilidUpdateAttachment(this.state);
|
||||
}
|
||||
|
||||
// VeilidState
|
||||
//////////////////////////////////////
|
||||
/// VeilidState
|
||||
|
||||
class VeilidState {
|
||||
final AttachmentState attachment;
|
||||
@@ -71,22 +338,206 @@ class VeilidState {
|
||||
VeilidState(this.attachment);
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
/// VeilidAPIException
|
||||
|
||||
abstract class VeilidAPIException implements Exception {
|
||||
factory VeilidAPIException.fromJson(String json) {
|
||||
var parsed = jsonDecode(json);
|
||||
switch (parsed["kind"]) {
|
||||
case "NotInitialized":
|
||||
{
|
||||
return VeilidAPIExceptionNotInitialized();
|
||||
}
|
||||
case "AlreadyInitialized":
|
||||
{
|
||||
return VeilidAPIExceptionAlreadyInitialized();
|
||||
}
|
||||
case "Timeout":
|
||||
{
|
||||
return VeilidAPIExceptionTimeout();
|
||||
}
|
||||
case "Shutdown":
|
||||
{
|
||||
return VeilidAPIExceptionShutdown();
|
||||
}
|
||||
case "NodeNotFound":
|
||||
{
|
||||
return VeilidAPIExceptionNodeNotFound(parsed["node_id"]);
|
||||
}
|
||||
case "NoDialInfo":
|
||||
{
|
||||
return VeilidAPIExceptionNoDialInfo(parsed["node_id"]);
|
||||
}
|
||||
case "Internal":
|
||||
{
|
||||
return VeilidAPIExceptionInternal(parsed["message"]);
|
||||
}
|
||||
case "Unimplemented":
|
||||
{
|
||||
return VeilidAPIExceptionUnimplemented(parsed["unimplemented"]);
|
||||
}
|
||||
case "ParseError":
|
||||
{
|
||||
return VeilidAPIExceptionParseError(
|
||||
parsed["message"], parsed["value"]);
|
||||
}
|
||||
case "InvalidArgument":
|
||||
{
|
||||
return VeilidAPIExceptionInvalidArgument(
|
||||
parsed["context"], parsed["argument"], parsed["value"]);
|
||||
}
|
||||
case "MissingArgument":
|
||||
{
|
||||
return VeilidAPIExceptionMissingArgument(
|
||||
parsed["context"], parsed["argument"]);
|
||||
}
|
||||
default:
|
||||
{
|
||||
throw VeilidAPIExceptionInternal(
|
||||
"Invalid VeilidAPIException type: ${parsed['kind']}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Veilid singleton factory
|
||||
class VeilidAPIExceptionNotInitialized implements VeilidAPIException {
|
||||
@override
|
||||
String toString() {
|
||||
return "VeilidAPIException: NotInitialized";
|
||||
}
|
||||
}
|
||||
|
||||
abstract class Veilid {
|
||||
static Veilid _instance;
|
||||
class VeilidAPIExceptionAlreadyInitialized implements VeilidAPIException {
|
||||
@override
|
||||
String toString() {
|
||||
return "VeilidAPIException: AlreadyInitialized";
|
||||
}
|
||||
}
|
||||
|
||||
static Veilid get instance {
|
||||
_instance ??= getVeilid();
|
||||
return _instance;
|
||||
class VeilidAPIExceptionTimeout implements VeilidAPIException {
|
||||
@override
|
||||
String toString() {
|
||||
return "VeilidAPIException: Timeout";
|
||||
}
|
||||
}
|
||||
|
||||
class VeilidAPIExceptionShutdown implements VeilidAPIException {
|
||||
@override
|
||||
String toString() {
|
||||
return "VeilidAPIException: Shutdown";
|
||||
}
|
||||
}
|
||||
|
||||
class VeilidAPIExceptionNodeNotFound implements VeilidAPIException {
|
||||
final String nodeId;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return "VeilidAPIException: NodeNotFound (nodeId: $nodeId)";
|
||||
}
|
||||
|
||||
Stream<VeilidUpdate> startupVeilidCore(String config);
|
||||
Future<Result<VeilidState, VeilidAPIError>> getVeilidState();
|
||||
Future<Result<Unit, VeilidAPIError>> changeApiLogLevel(VeilidLogLevel logLevel);
|
||||
Future<Result<Unit, VeilidAPIError>> shutdownVeilidCore();
|
||||
//
|
||||
VeilidAPIExceptionNodeNotFound(this.nodeId);
|
||||
}
|
||||
|
||||
class VeilidAPIExceptionNoDialInfo implements VeilidAPIException {
|
||||
final String nodeId;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return "VeilidAPIException: NoDialInfo (nodeId: $nodeId)";
|
||||
}
|
||||
|
||||
//
|
||||
VeilidAPIExceptionNoDialInfo(this.nodeId);
|
||||
}
|
||||
|
||||
class VeilidAPIExceptionInternal implements VeilidAPIException {
|
||||
final String message;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return "VeilidAPIException: Internal ($message)";
|
||||
}
|
||||
|
||||
//
|
||||
VeilidAPIExceptionInternal(this.message);
|
||||
}
|
||||
|
||||
class VeilidAPIExceptionUnimplemented implements VeilidAPIException {
|
||||
final String message;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return "VeilidAPIException: Unimplemented ($message)";
|
||||
}
|
||||
|
||||
//
|
||||
VeilidAPIExceptionUnimplemented(this.message);
|
||||
}
|
||||
|
||||
class VeilidAPIExceptionParseError implements VeilidAPIException {
|
||||
final String message;
|
||||
final String value;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return "VeilidAPIException: ParseError ($message)\n value: $value";
|
||||
}
|
||||
|
||||
//
|
||||
VeilidAPIExceptionParseError(this.message, this.value);
|
||||
}
|
||||
|
||||
class VeilidAPIExceptionInvalidArgument implements VeilidAPIException {
|
||||
final String context;
|
||||
final String argument;
|
||||
final String value;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return "VeilidAPIException: InvalidArgument ($context:$argument)\n value: $value";
|
||||
}
|
||||
|
||||
//
|
||||
VeilidAPIExceptionInvalidArgument(this.context, this.argument, this.value);
|
||||
}
|
||||
|
||||
class VeilidAPIExceptionMissingArgument implements VeilidAPIException {
|
||||
final String context;
|
||||
final String argument;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return "VeilidAPIException: MissingArgument ($context:$argument)";
|
||||
}
|
||||
|
||||
//
|
||||
VeilidAPIExceptionMissingArgument(this.context, this.argument);
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
/// VeilidVersion
|
||||
|
||||
class VeilidVersion {
|
||||
final int major;
|
||||
final int minor;
|
||||
final int patch;
|
||||
|
||||
VeilidVersion(this.major, this.minor, this.patch);
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
/// Veilid singleton factory
|
||||
|
||||
abstract class Veilid {
|
||||
static late Veilid instance = getVeilid();
|
||||
|
||||
Stream<VeilidUpdate> startupVeilidCore(VeilidConfig config);
|
||||
Future<VeilidState> getVeilidState();
|
||||
Future<void> changeApiLogLevel(VeilidLogLevel logLevel);
|
||||
Future<void> shutdownVeilidCore();
|
||||
String veilidVersionString();
|
||||
VeilidVersion veilidVersion();
|
||||
}
|
||||
|
@@ -1,12 +1,12 @@
|
||||
import 'dart:async';
|
||||
import 'dart:ffi' as ffi;
|
||||
import 'dart:ffi';
|
||||
import 'dart:io';
|
||||
import 'dart:typed_data';
|
||||
import 'dart:isolate';
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:ffi/ffi.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:oxidized/oxidized.dart';
|
||||
|
||||
import 'veilid.dart';
|
||||
|
||||
//////////////////////////////////////////////////////////
|
||||
|
||||
@@ -17,16 +17,19 @@ final _path = Platform.isWindows
|
||||
: Platform.isMacOS
|
||||
? 'lib$_base.dylib'
|
||||
: 'lib$_base.so';
|
||||
late final _dylib = Platform.isIOS ? DynamicLibrary.process() : DynamicLibrary.open(_path);
|
||||
late final _dylib =
|
||||
Platform.isIOS ? DynamicLibrary.process() : DynamicLibrary.open(_path);
|
||||
|
||||
// Linkage for initialization
|
||||
typedef _dart_postCObject = NativeFunction<Int8 Function(Int64, Pointer<Dart_CObject>)>;
|
||||
typedef _dart_postCObject
|
||||
= NativeFunction<Int8 Function(Int64, Pointer<Dart_CObject>)>;
|
||||
// fn free_string(s: *mut std::os::raw::c_char)
|
||||
typedef _free_string_C = Void Function(Pointer<Utf8>);
|
||||
typedef _free_string_Dart = void Function(Pointer<Utf8>);
|
||||
// fn initialize_veilid_flutter(dart_post_c_object_ptr: ffi::DartPostCObjectFnType)
|
||||
typedef _initializeVeilidFlutter_C = Void Function(Pointer<_dart_postCObject>);
|
||||
typedef _initializeVeilidFlutter_Dart = void Function(Pointer<_dart_postCObject>);
|
||||
typedef _initializeVeilidFlutter_Dart = void Function(
|
||||
Pointer<_dart_postCObject>);
|
||||
// fn startup_veilid_core(port: i64, config: FfiStr)
|
||||
typedef _startup_veilid_core_C = Void Function(Int64, Pointer<Utf8>);
|
||||
typedef _startup_veilid_core_Dart = void Function(int, Pointer<Utf8>);
|
||||
@@ -42,8 +45,9 @@ typedef _shutdown_veilid_core_Dart = void Function(int);
|
||||
// fn veilid_version_string() -> *mut c_char
|
||||
typedef _veilid_version_string_C = Pointer<Utf8> Function();
|
||||
typedef _veilid_version_string_Dart = Pointer<Utf8> Function();
|
||||
|
||||
// fn veilid_version() -> VeilidVersion
|
||||
class VeilidVersion extends Struct {
|
||||
class VeilidVersionFFI extends Struct {
|
||||
@Uint32()
|
||||
external int major;
|
||||
@Uint32()
|
||||
@@ -51,14 +55,115 @@ class VeilidVersion extends Struct {
|
||||
@Uint32()
|
||||
external int patch;
|
||||
}
|
||||
typedef _veilid_version_C = VeilidVersion Function();
|
||||
typedef _veilid_version_Dart = VeilidVersion Function();
|
||||
|
||||
typedef _veilid_version_C = VeilidVersionFFI Function();
|
||||
typedef _veilid_version_Dart = VeilidVersionFFI Function();
|
||||
|
||||
// Async message types
|
||||
const int MESSAGE_OK = 0;
|
||||
const int MESSAGE_ERR = 1;
|
||||
const int MESSAGE_OK_JSON = 2;
|
||||
const int MESSAGE_ERR_JSON = 3;
|
||||
const int MESSAGE_STREAM_ITEM = 4;
|
||||
const int MESSAGE_STREAM_ITEM_JSON = 5;
|
||||
const int MESSAGE_STREAM_ABORT = 6;
|
||||
const int MESSAGE_STREAM_ABORT_JSON = 7;
|
||||
const int MESSAGE_STREAM_CLOSE = 8;
|
||||
|
||||
// Interface factory for high level Veilid API
|
||||
Veilid getVeilid() => VeilidFFI(_dylib);
|
||||
|
||||
// Parse handle async returns
|
||||
Future<T> processSingleAsyncReturn<T>(Future<dynamic> future) async {
|
||||
return future.then((value) {
|
||||
final list = value as List<dynamic>;
|
||||
switch (list[0] as int) {
|
||||
case MESSAGE_OK:
|
||||
{
|
||||
if (list[1] != null) {
|
||||
throw VeilidAPIExceptionInternal(
|
||||
"Unexpected MESSAGE_OK value '${list[1]}' where null expected");
|
||||
}
|
||||
return list[1] as T;
|
||||
}
|
||||
case MESSAGE_ERR:
|
||||
{
|
||||
throw VeilidAPIExceptionInternal("Internal API Error: ${value[1]}");
|
||||
}
|
||||
case MESSAGE_OK_JSON:
|
||||
{
|
||||
var ret = jsonDecode(list[1] as String);
|
||||
if (ret != null) {
|
||||
throw VeilidAPIExceptionInternal(
|
||||
"Unexpected MESSAGE_OK_JSON value '$ret' where null expected");
|
||||
}
|
||||
return ret as T;
|
||||
}
|
||||
case MESSAGE_ERR_JSON:
|
||||
{
|
||||
throw VeilidAPIException.fromJson(value[1] as String);
|
||||
}
|
||||
default:
|
||||
{
|
||||
throw VeilidAPIExceptionInternal(
|
||||
"Unexpected async return message type: ${value[0]}");
|
||||
}
|
||||
}
|
||||
}).catchError((e) {
|
||||
// Wrap all other errors in VeilidAPIExceptionInternal
|
||||
throw VeilidAPIExceptionInternal(e.toString());
|
||||
}, test: (e) {
|
||||
// Pass errors that are already VeilidAPIException through without wrapping
|
||||
return e is! VeilidAPIException;
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> processSingleAsyncVoid(Future<dynamic> future) async {
|
||||
return future.then((value) {
|
||||
final list = value as List<dynamic>;
|
||||
switch (list[0] as int) {
|
||||
case MESSAGE_OK:
|
||||
{
|
||||
if (list[1] != null) {
|
||||
throw VeilidAPIExceptionInternal(
|
||||
"Unexpected MESSAGE_OK value '${list[1]}' where null expected");
|
||||
}
|
||||
return;
|
||||
}
|
||||
case MESSAGE_ERR:
|
||||
{
|
||||
throw VeilidAPIExceptionInternal("Internal API Error: ${value[1]}");
|
||||
}
|
||||
case MESSAGE_OK_JSON:
|
||||
{
|
||||
var ret = jsonDecode(list[1] as String);
|
||||
if (ret != null) {
|
||||
throw VeilidAPIExceptionInternal(
|
||||
"Unexpected MESSAGE_OK_JSON value '$ret' where null expected");
|
||||
}
|
||||
return;
|
||||
}
|
||||
case MESSAGE_ERR_JSON:
|
||||
{
|
||||
throw VeilidAPIException.fromJson(value[1] as String);
|
||||
}
|
||||
default:
|
||||
{
|
||||
throw VeilidAPIExceptionInternal(
|
||||
"Unexpected async return message type: ${value[0]}");
|
||||
}
|
||||
}
|
||||
}).catchError((e) {
|
||||
// Wrap all other errors in VeilidAPIExceptionInternal
|
||||
throw VeilidAPIExceptionInternal(e.toString());
|
||||
}, test: (e) {
|
||||
// Pass errors that are already VeilidAPIException through without wrapping
|
||||
return e is! VeilidAPIException;
|
||||
});
|
||||
}
|
||||
|
||||
// FFI implementation of high level Veilid API
|
||||
class VeilidFFI {
|
||||
class VeilidFFI implements Veilid {
|
||||
// veilid_core shared library
|
||||
final DynamicLibrary _dylib;
|
||||
|
||||
@@ -69,38 +174,77 @@ class VeilidFFI {
|
||||
final _change_api_log_level_Dart _changeApiLogLevel;
|
||||
final _shutdown_veilid_core_Dart _shutdownVeilidCore;
|
||||
final _veilid_version_string_Dart _veilidVersionString;
|
||||
final _veilid_version_Dat _veilidVersion;
|
||||
final _veilid_version_Dart _veilidVersion;
|
||||
|
||||
VeilidFFI(DynamicLibrary dylib): _dylib = dylib {
|
||||
var initializeVeilidFlutter = _dylib.lookupFunction<_initializeVeilidFlutter_C, _initializeVeilidFlutter_Dart>('initialize_veilid_flutter');
|
||||
VeilidFFI(DynamicLibrary dylib)
|
||||
: _dylib = dylib,
|
||||
_freeString = dylib
|
||||
.lookupFunction<_free_string_C, _free_string_Dart>('free_string'),
|
||||
_startupVeilidCore = dylib.lookupFunction<_startup_veilid_core_C,
|
||||
_startup_veilid_core_Dart>('startup_veilid_core'),
|
||||
_getVeilidState =
|
||||
dylib.lookupFunction<_get_veilid_state_C, _get_veilid_state_Dart>(
|
||||
'get_veilid_state'),
|
||||
_changeApiLogLevel = dylib.lookupFunction<_change_api_log_level_C,
|
||||
_change_api_log_level_Dart>('change_api_log_level'),
|
||||
_shutdownVeilidCore = dylib.lookupFunction<_shutdown_veilid_core_C,
|
||||
_shutdown_veilid_core_Dart>('shutdown_veilid_core'),
|
||||
_veilidVersionString = dylib.lookupFunction<_veilid_version_string_C,
|
||||
_veilid_version_string_Dart>('veilid_version_string'),
|
||||
_veilidVersion =
|
||||
dylib.lookupFunction<_veilid_version_C, _veilid_version_Dart>(
|
||||
'veilid_version') {
|
||||
// Get veilid_flutter initializer
|
||||
var initializeVeilidFlutter = _dylib.lookupFunction<
|
||||
_initializeVeilidFlutter_C,
|
||||
_initializeVeilidFlutter_Dart>('initialize_veilid_flutter');
|
||||
initializeVeilidFlutter(NativeApi.postCObject);
|
||||
|
||||
// Look up shared library functions
|
||||
_freeString = dylib.lookupFunction<_free_string_C, _free_string_Dart>('free_string');
|
||||
_startupVeilidCore = dylib.lookupFunction<_startup_veilid_core_C, _startup_veilid_core_Dart>('startup_veilid_core');
|
||||
_getveilidState = dylib.lookupFunction<_get_veilid_state_C, _get_veilid_state_Dart>('get_veilid_state');
|
||||
_changeApiLogLevel = dylib.lookupFunction<_change_api_log_level_C, _change_api_log_level_Dart>('change_api_log_level');
|
||||
_shutdownVeilidCore = dylib.lookupFunction<_shutdown_veilid_core_C, _shutdown_veilid_core_Dart>('shutdown_veilid_core');
|
||||
_veilidVersionString = dylib.lookupFunction<_veilid_version_string_C, _veilid_version_string_Dart>('veilid_version_string');
|
||||
_veilidVersion = dylib.lookupFunction<_veilid_version_C, _veilid_version_Dart>('veilid_version');
|
||||
}
|
||||
|
||||
Stream<VeilidUpdate> startupVeilidCore(String config);
|
||||
Future<Result<VeilidState, VeilidAPIError>> getVeilidState();
|
||||
Future<Result<Unit, VeilidAPIError>> changeApiLogLevel(VeilidLogLevel logLevel);
|
||||
Future<Result<Unit, VeilidAPIError>> shutdownVeilidCore() async {
|
||||
// xxx continue here
|
||||
@override
|
||||
Stream<VeilidUpdate> startupVeilidCore(VeilidConfig config) async* {}
|
||||
|
||||
@override
|
||||
Future<VeilidState> getVeilidState() async {
|
||||
final recv_port = ReceivePort("shutdown_veilid_core");
|
||||
final send_port = recv_port.sendPort;
|
||||
_shutdownVeilidCore(send_port.nativePort);
|
||||
processSingleAsyncReturn(recv_port.single);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> changeApiLogLevel(VeilidLogLevel logLevel) async {
|
||||
var nativeLogLevel = jsonEncode(logLevel).toNativeUtf8();
|
||||
final recv_port = ReceivePort("change_api_log_level");
|
||||
final send_port = recv_port.sendPort;
|
||||
_changeApiLogLevel(send_port.nativePort, nativeLogLevel);
|
||||
malloc.free(nativeLogLevel);
|
||||
processSingleAsyncVoid(recv_port.single);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> shutdownVeilidCore() async {
|
||||
final recv_port = ReceivePort("shutdown_veilid_core");
|
||||
final send_port = recv_port.sendPort;
|
||||
_shutdownVeilidCore(send_port.nativePort);
|
||||
processSingleAsyncVoid(recv_port.single);
|
||||
}
|
||||
|
||||
@override
|
||||
String veilidVersionString() {
|
||||
final version_string = _veilidVersionString();
|
||||
String ret = version_string.toDartString();
|
||||
_freeString(version_string);
|
||||
return version_string;
|
||||
final versionString = _veilidVersionString();
|
||||
String ret = versionString.toDartString();
|
||||
_freeString(versionString);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@override
|
||||
VeilidVersion veilidVersion() {
|
||||
return _veilidVersion();
|
||||
final version = _veilidVersion();
|
||||
return VeilidVersion(
|
||||
version.major,
|
||||
version.minor,
|
||||
version.patch,
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -6,14 +6,12 @@ import 'dart:typed_data';
|
||||
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:oxidized/oxidized.dart';
|
||||
|
||||
//////////////////////////////////////////////////////////
|
||||
|
||||
Veilid getVeilid() => VeilidJS();
|
||||
|
||||
class VeilidJS {
|
||||
|
||||
Stream<VeilidUpdate> startupVeilidCore(Object? configCallback(String key)) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
@@ -25,7 +23,7 @@ class VeilidJS {
|
||||
Future<void> changeApiLogLevel(VeilidLogLevel logLevel) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
|
||||
Future<void> shutdownVeilidCore() {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
@@ -37,5 +35,4 @@ class VeilidJS {
|
||||
Future<VeilidVersion> veilidVersion() {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -1,3 +1,3 @@
|
||||
import 'veilid.dart'
|
||||
import 'veilid.dart';
|
||||
|
||||
Veilid getVeilid() => throw UnsupportedError('Cannot create Veilid object');
|
||||
|
Reference in New Issue
Block a user