UI improvements for telemetry debugging
This commit is contained in:
@@ -52,6 +52,7 @@ class UdpTransport implements LinkTransport {
|
||||
|
||||
final _incomingController = StreamController<Uint8List>.broadcast();
|
||||
final _stateController = StreamController<LinkState>.broadcast();
|
||||
final _ssidController = StreamController<String?>.broadcast();
|
||||
|
||||
StreamSubscription<MlrsSocketPacket>? _packetSub;
|
||||
StreamSubscription<MlrsNetworkEvent>? _networkLossSub;
|
||||
@@ -99,6 +100,12 @@ class UdpTransport implements LinkTransport {
|
||||
/// angefragt werden koennen.
|
||||
String? get connectedSsid => _connectedSsid;
|
||||
|
||||
/// Reaktive Aenderungen von [connectedSsid] - liefert erneut ein Ereignis,
|
||||
/// wenn Android die SSID nachtraeglich meldet (siehe [_onNetworkEvent]),
|
||||
/// da die Zustandsmaschine dafuer kein neues [LinkState] durchlaeuft und
|
||||
/// die UI sonst nicht mitbekommt, dass sich der Wert geaendert hat.
|
||||
Stream<String?> get connectedSsidChanges => _ssidController.stream;
|
||||
|
||||
@override
|
||||
Future<void> connect() async {
|
||||
// Idempotent: mehrere Aufrufer koennen unabhaengig voneinander "sorg
|
||||
@@ -143,6 +150,7 @@ class UdpTransport implements LinkTransport {
|
||||
_networkLossSub = _networkController.events.listen(_onNetworkEvent);
|
||||
|
||||
_connectedSsid = available.ssid;
|
||||
_ssidController.add(_connectedSsid);
|
||||
if (available.ssid != null) {
|
||||
await _rememberSsid(available.ssid!);
|
||||
}
|
||||
@@ -196,21 +204,36 @@ class UdpTransport implements LinkTransport {
|
||||
}
|
||||
|
||||
void _onNetworkEvent(MlrsNetworkEvent event) {
|
||||
if (event is! MlrsNetworkLost) return;
|
||||
_networkLossSub?.cancel();
|
||||
_networkLossSub = null;
|
||||
_packetSub?.cancel();
|
||||
_packetSub = null;
|
||||
_boundPort = null;
|
||||
_connectedSsid = null;
|
||||
if (_socketOpen) {
|
||||
_socketOpen = false;
|
||||
unawaited(_networkController.closeSocket());
|
||||
switch (event) {
|
||||
case MlrsNetworkSsidUpdated():
|
||||
// Android liefert WifiInfo/SSID fuer WifiNetworkSpecifier-Netze oft
|
||||
// erst nach onAvailable() nach (siehe MlrsNetworkPlugin.kt) - hier
|
||||
// nachtragen und merken, statt auf das schon vergangene erste
|
||||
// Ereignis in connect() angewiesen zu sein.
|
||||
_connectedSsid = event.ssid;
|
||||
_ssidController.add(_connectedSsid);
|
||||
unawaited(_rememberSsid(event.ssid));
|
||||
case MlrsNetworkLost():
|
||||
_networkLossSub?.cancel();
|
||||
_networkLossSub = null;
|
||||
_packetSub?.cancel();
|
||||
_packetSub = null;
|
||||
_boundPort = null;
|
||||
_connectedSsid = null;
|
||||
_ssidController.add(null);
|
||||
if (_socketOpen) {
|
||||
_socketOpen = false;
|
||||
unawaited(_networkController.closeSocket());
|
||||
}
|
||||
_setError(
|
||||
LinkErrorReason.networkLost,
|
||||
'The mLRS WiFi network was lost.',
|
||||
);
|
||||
case MlrsNetworkAvailable() || MlrsNetworkUnavailable():
|
||||
// Wird hier nicht erwartet - diese Ereignisse werden nur waehrend
|
||||
// des initialen connect() ueber firstEvent ausgewertet (siehe oben).
|
||||
break;
|
||||
}
|
||||
_setError(
|
||||
LinkErrorReason.networkLost,
|
||||
'The mLRS WiFi network was lost.',
|
||||
);
|
||||
}
|
||||
|
||||
void _onPacket(MlrsSocketPacket packet) {
|
||||
@@ -227,6 +250,7 @@ class UdpTransport implements LinkTransport {
|
||||
_packetSub = null;
|
||||
_boundPort = null;
|
||||
_connectedSsid = null;
|
||||
_ssidController.add(null);
|
||||
if (_socketOpen) {
|
||||
_socketOpen = false;
|
||||
await _networkController.closeSocket();
|
||||
@@ -265,6 +289,7 @@ class UdpTransport implements LinkTransport {
|
||||
_networkController.dispose();
|
||||
_incomingController.close();
|
||||
_stateController.close();
|
||||
_ssidController.close();
|
||||
}
|
||||
|
||||
void _setError(LinkErrorReason reason, String message) {
|
||||
|
||||
Reference in New Issue
Block a user