This commit is contained in:
John Smith 2022-12-25 21:28:45 -05:00
parent e9da652e9a
commit 525baea32c
7 changed files with 9 additions and 373 deletions

View File

@ -1514,6 +1514,7 @@ impl NetworkManager {
bps_down: 0.into(),
bps_up: 0.into(),
peers: Vec::new(),
};
}
let routing_table = self.routing_table();

View File

@ -59,6 +59,10 @@ pub struct RoutingTableHealth {
pub unreliable_entry_count: usize,
/// Number of dead (always unresponsive) entries in the routing table
pub dead_entry_count: usize,
/// If PublicInternet network class is valid yet
pub public_internet_network_class_valid: bool, xxx do this and add to attachment calculation
/// If LocalNetwork network class is valid yet
pub local_network_network_class_valid: bool,
}
pub(super) struct RoutingTableUnlockedInner {

View File

@ -7,7 +7,6 @@ import 'package:loggy/loggy.dart';
import 'package:veilid_example/veilid_theme.dart';
import 'log_terminal.dart';
import 'config.dart';
import 'log.dart';
import 'history_wrapper.dart';
@ -110,8 +109,8 @@ class _MyAppState extends State<MyApp> with UiLoggy {
Future<void> toggleStartup(bool startup) async {
if (startup && !_startedUp) {
var updateStream = await Veilid.instance
.startupVeilidCore(await getDefaultVeilidConfig());
var updateStream = await Veilid.instance.startupVeilidCore(
await getDefaultVeilidConfig("Veilid Plugin Example"));
setState(() {
_updateStream = updateStream;
_updateProcessor = processUpdates();

View File

@ -1,140 +0,0 @@
import 'package:veilid/veilid.dart';
import 'package:flutter/foundation.dart' show kIsWeb;
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart' as p;
Future<VeilidConfig> getDefaultVeilidConfig() async {
return VeilidConfig(
programName: "Veilid Plugin Test",
namespace: "",
capabilities: VeilidConfigCapabilities(
protocolUDP: !kIsWeb,
protocolConnectTCP: !kIsWeb,
protocolAcceptTCP: !kIsWeb,
protocolConnectWS: true,
protocolAcceptWS: !kIsWeb,
protocolConnectWSS: true,
protocolAcceptWSS: false,
),
protectedStore: VeilidConfigProtectedStore(
allowInsecureFallback: false,
alwaysUseInsecureStorage: false,
insecureFallbackDirectory: "",
delete: false,
),
tableStore: VeilidConfigTableStore(
directory: kIsWeb
? ""
: p.join((await getApplicationSupportDirectory()).absolute.path,
"table_store"),
delete: false,
),
blockStore: VeilidConfigBlockStore(
directory: kIsWeb
? ""
: p.join((await getApplicationSupportDirectory()).absolute.path,
"block_store"),
delete: false,
),
network: VeilidConfigNetwork(
connectionInitialTimeoutMs: 2000,
connectionInactivityTimeoutMs: 60000,
maxConnectionsPerIp4: 32,
maxConnectionsPerIp6Prefix: 32,
maxConnectionsPerIp6PrefixSize: 56,
maxConnectionFrequencyPerMin: 128,
clientWhitelistTimeoutMs: 300000,
reverseConnectionReceiptTimeMs: 5000,
holePunchReceiptTimeMs: 5000,
nodeId: null,
nodeIdSecret: null,
bootstrap: kIsWeb
? ["ws://bootstrap.dev.veilid.net:5150/ws"]
: ["bootstrap.dev.veilid.net"],
bootstrapNodes: [],
routingTable: VeilidConfigRoutingTable(
limitOverAttached: 64,
limitFullyAttached: 32,
limitAttachedStrong: 16,
limitAttachedGood: 8,
limitAttachedWeak: 4,
),
rpc: VeilidConfigRPC(
concurrency: 0,
queueSize: 1024,
maxTimestampBehindMs: 10000,
maxTimestampAheadMs: 10000,
timeoutMs: 10000,
maxRouteHopCount: 4,
defaultRouteHopCount: 1,
),
dht: VeilidConfigDHT(
resolveNodeTimeoutMs: null,
resolveNodeCount: 20,
resolveNodeFanout: 3,
maxFindNodeCount: 20,
getValueTimeoutMs: null,
getValueCount: 20,
getValueFanout: 3,
setValueTimeoutMs: null,
setValueCount: 20,
setValueFanout: 5,
minPeerCount: 20,
minPeerRefreshTimeMs: 2000,
validateDialInfoReceiptTimeMs: 2000,
),
upnp: true,
detectAddressChanges: true,
restrictedNatRetries: 0,
tls: VeilidConfigTLS(
certificatePath: "",
privateKeyPath: "",
connectionInitialTimeoutMs: 2000,
),
application: VeilidConfigApplication(
https: VeilidConfigHTTPS(
enabled: false,
listenAddress: "",
path: "",
url: null,
),
http: VeilidConfigHTTP(
enabled: false,
listenAddress: "",
path: "",
url: null,
)),
protocol: VeilidConfigProtocol(
udp: VeilidConfigUDP(
enabled: !kIsWeb,
socketPoolSize: 0,
listenAddress: "",
publicAddress: null,
),
tcp: VeilidConfigTCP(
connect: !kIsWeb,
listen: !kIsWeb,
maxConnections: 32,
listenAddress: "",
publicAddress: null,
),
ws: VeilidConfigWS(
connect: true,
listen: !kIsWeb,
maxConnections: 16,
listenAddress: "",
path: "ws",
url: null,
),
wss: VeilidConfigWSS(
connect: true,
listen: false,
maxConnections: 16,
listenAddress: "",
path: "ws",
url: null,
),
),
),
);
}

View File

@ -1,149 +0,0 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
class AppPlatformMenu extends StatefulWidget {
const AppPlatformMenu({super.key, required this.child});
final Widget child;
@override
State<AppPlatformMenu> createState() => _AppPlatformMenuState();
}
class _AppPlatformMenuState extends State<AppPlatformMenu> {
@override
Widget build(BuildContext context) {
if (defaultTargetPlatform != TargetPlatform.macOS) {
return widget.child;
}
return PlatformMenuBar(
menus: <MenuItem>[
PlatformMenu(
label: 'TerminalStudio',
menus: [
if (PlatformProvidedMenuItem.hasMenu(
PlatformProvidedMenuItemType.about,
))
const PlatformProvidedMenuItem(
type: PlatformProvidedMenuItemType.about,
),
PlatformMenuItemGroup(
members: [
if (PlatformProvidedMenuItem.hasMenu(
PlatformProvidedMenuItemType.servicesSubmenu,
))
const PlatformProvidedMenuItem(
type: PlatformProvidedMenuItemType.servicesSubmenu,
),
],
),
PlatformMenuItemGroup(
members: [
if (PlatformProvidedMenuItem.hasMenu(
PlatformProvidedMenuItemType.hide,
))
const PlatformProvidedMenuItem(
type: PlatformProvidedMenuItemType.hide,
),
if (PlatformProvidedMenuItem.hasMenu(
PlatformProvidedMenuItemType.hideOtherApplications,
))
const PlatformProvidedMenuItem(
type: PlatformProvidedMenuItemType.hideOtherApplications,
),
],
),
if (PlatformProvidedMenuItem.hasMenu(
PlatformProvidedMenuItemType.quit,
))
const PlatformProvidedMenuItem(
type: PlatformProvidedMenuItemType.quit,
),
],
),
PlatformMenu(
label: 'Edit',
menus: [
PlatformMenuItemGroup(
members: [
PlatformMenuItem(
label: 'Copy',
shortcut: const SingleActivator(
LogicalKeyboardKey.keyC,
meta: true,
),
onSelected: () {
final primaryContext = primaryFocus?.context;
if (primaryContext == null) {
return;
}
Actions.invoke(
primaryContext,
CopySelectionTextIntent.copy,
);
},
),
PlatformMenuItem(
label: 'Paste',
shortcut: const SingleActivator(
LogicalKeyboardKey.keyV,
meta: true,
),
onSelected: () {
final primaryContext = primaryFocus?.context;
if (primaryContext == null) {
return;
}
Actions.invoke(
primaryContext,
const PasteTextIntent(SelectionChangedCause.keyboard),
);
},
),
PlatformMenuItem(
label: 'Select All',
shortcut: const SingleActivator(
LogicalKeyboardKey.keyA,
meta: true,
),
onSelected: () {
final primaryContext = primaryFocus?.context;
if (primaryContext == null) {
return;
}
print(primaryContext);
try {
final action = Actions.maybeFind<Intent>(
primaryContext,
intent: const SelectAllTextIntent(
SelectionChangedCause.keyboard,
),
);
print('action: $action');
} catch (e) {
print(e);
}
Actions.invoke<Intent>(
primaryContext,
const SelectAllTextIntent(SelectionChangedCause.keyboard),
);
},
),
],
),
if (PlatformProvidedMenuItem.hasMenu(
PlatformProvidedMenuItemType.quit,
))
const PlatformProvidedMenuItem(
type: PlatformProvidedMenuItemType.quit,
),
],
),
],
child: widget.child,
);
}
}

View File

@ -1,80 +0,0 @@
import 'package:flutter/material.dart';
import 'package:xterm/xterm.dart';
class VirtualKeyboardView extends StatelessWidget {
const VirtualKeyboardView(this.keyboard, {super.key});
final VirtualKeyboard keyboard;
@override
Widget build(BuildContext context) {
return AnimatedBuilder(
animation: keyboard,
builder: (context, child) => ToggleButtons(
isSelected: [keyboard.ctrl, keyboard.alt, keyboard.shift],
onPressed: (index) {
switch (index) {
case 0:
keyboard.ctrl = !keyboard.ctrl;
break;
case 1:
keyboard.alt = !keyboard.alt;
break;
case 2:
keyboard.shift = !keyboard.shift;
break;
}
},
children: const [Text('Ctrl'), Text('Alt'), Text('Shift')],
),
);
}
}
class VirtualKeyboard extends TerminalInputHandler with ChangeNotifier {
final TerminalInputHandler _inputHandler;
VirtualKeyboard(this._inputHandler);
bool _ctrl = false;
bool get ctrl => _ctrl;
set ctrl(bool value) {
if (_ctrl != value) {
_ctrl = value;
notifyListeners();
}
}
bool _shift = false;
bool get shift => _shift;
set shift(bool value) {
if (_shift != value) {
_shift = value;
notifyListeners();
}
}
bool _alt = false;
bool get alt => _alt;
set alt(bool value) {
if (_alt != value) {
_alt = value;
notifyListeners();
}
}
@override
String? call(TerminalKeyboardEvent event) {
return _inputHandler.call(event.copyWith(
ctrl: event.ctrl || _ctrl,
shift: event.shift || _shift,
alt: event.alt || _alt,
));
}
}

View File

@ -1,5 +1,4 @@
import 'dart:async';
import 'dart:html';
import 'dart:typed_data';
import 'dart:convert';
@ -11,6 +10,8 @@ import 'veilid_stub.dart'
//////////////////////////////////////////////////////////
export 'default_config.dart';
//////////////////////////////////////////////////////////
// FFI Platform-specific config