wifi connection established by app, process socket binding, primary os connection untouched
This commit is contained in:
@@ -15,6 +15,7 @@ final wifiTransportProvider = Provider<UdpTransport>((ref) {
|
||||
final transport = UdpTransport(
|
||||
getHost: settingsRepo.loadConnectionWifiHost,
|
||||
getPort: settingsRepo.loadConnectionWifiPort,
|
||||
getSsidPrefix: settingsRepo.loadConnectionWifiSsidPrefix,
|
||||
);
|
||||
ref.onDispose(transport.dispose);
|
||||
return transport;
|
||||
@@ -96,6 +97,7 @@ class WifiConnectionLogNotifier
|
||||
StreamSubscription<LinkState>? _stateSub;
|
||||
StreamSubscription<void>? _dataSub;
|
||||
int _packetCount = 0;
|
||||
String? _lastLoggedPeer;
|
||||
|
||||
int get packetCount => _packetCount;
|
||||
|
||||
@@ -105,8 +107,9 @@ class WifiConnectionLogNotifier
|
||||
_stateSub?.cancel();
|
||||
_dataSub?.cancel();
|
||||
_packetCount = 0;
|
||||
_lastLoggedPeer = null;
|
||||
_stateSub = transport.state.listen(_onStateChanged);
|
||||
_dataSub = transport.incoming.listen((_) => _packetCount++);
|
||||
_dataSub = transport.incoming.listen((_) => _onPacket(transport));
|
||||
ref.onDispose(() {
|
||||
_stateSub?.cancel();
|
||||
_dataSub?.cancel();
|
||||
@@ -114,18 +117,38 @@ class WifiConnectionLogNotifier
|
||||
return const [];
|
||||
}
|
||||
|
||||
void _onPacket(UdpTransport transport) {
|
||||
_packetCount++;
|
||||
// Gegenstelle wird aus dem ersten eingehenden Paket gelernt (Doku
|
||||
// Kommunikationsschicht v2, Abschnitt 3/9) - nur beim ersten Mal bzw.
|
||||
// bei Aenderung protokollieren, nicht pro Paket.
|
||||
final peer = transport.peerDescription;
|
||||
if (peer != null && peer != _lastLoggedPeer) {
|
||||
_lastLoggedPeer = peer;
|
||||
_append('Peer learned: $peer');
|
||||
}
|
||||
}
|
||||
|
||||
void _onStateChanged(LinkState linkState) {
|
||||
final transport = ref.read(wifiTransportProvider);
|
||||
final message = switch (linkState) {
|
||||
LinkState.disconnected => 'Disconnected',
|
||||
LinkState.connecting => 'Connecting...',
|
||||
LinkState.connected => 'Listening on port ${transport.boundPort}',
|
||||
LinkState.connecting => 'Requesting mLRS network...',
|
||||
LinkState.connected =>
|
||||
'Network available, listening on port ${transport.boundPort}'
|
||||
' (STA concurrency: ${_formatStaConcurrency(transport.staConcurrencySupported)})',
|
||||
LinkState.error => 'Error: '
|
||||
'${transport.lastErrorMessage ?? transport.lastErrorReason?.name ?? 'unknown'}',
|
||||
};
|
||||
_append(message);
|
||||
}
|
||||
|
||||
String _formatStaConcurrency(bool? supported) => switch (supported) {
|
||||
true => 'supported',
|
||||
false => 'not supported',
|
||||
null => 'unknown',
|
||||
};
|
||||
|
||||
void _append(String message) {
|
||||
final entry = WifiConnectionLogEntry(DateTime.now(), message);
|
||||
final next = [...state, entry];
|
||||
|
||||
Reference in New Issue
Block a user