From 29f7a2c444d60fa155451d7e7f65cf637a1b7f41 Mon Sep 17 00:00:00 2001
From: Matthias Nott <mnott@mnsoft.org>
Date: Wed, 25 Mar 2026 17:22:28 +0100
Subject: [PATCH] fix: M1 M2 M6 M7 L3 L5 - subnet batching, scroll debounce, error logging, typing timeout, remove unused deps
---
lib/services/mqtt_service.dart | 29 ++++++++++++++++-------------
1 files changed, 16 insertions(+), 13 deletions(-)
diff --git a/lib/services/mqtt_service.dart b/lib/services/mqtt_service.dart
index f0c6d21..7625e7b 100644
--- a/lib/services/mqtt_service.dart
+++ b/lib/services/mqtt_service.dart
@@ -228,19 +228,22 @@
final subnet = '${parts[0]}.${parts[1]}.${parts[2]}';
_mqttLog('MQTT: scanning $subnet.0/24 on ${iface.name}');
- // Probe all hosts in parallel — 1s timeout each, runs concurrently
- final futures = <Future<String?>>[];
- for (int i = 1; i <= 254; i++) {
- final probe = '$subnet.$i';
- if (probe == addr.address) continue; // skip self
- futures.add(_probeHost(probe, config.port));
- }
-
- final results = await Future.wait(futures);
- final found = results.firstWhere((r) => r != null, orElse: () => null);
- if (found != null) {
- _mqttLog('MQTT: subnet scan found broker at $found');
- return found;
+ // Probe in batches of 20 to avoid flooding the network.
+ // Early exit on first hit.
+ for (int batch = 1; batch <= 254; batch += 20) {
+ final end = (batch + 19).clamp(1, 254);
+ final futures = <Future<String?>>[];
+ for (int i = batch; i <= end; i++) {
+ final probe = '$subnet.$i';
+ if (probe == addr.address) continue;
+ futures.add(_probeHost(probe, config.port));
+ }
+ final results = await Future.wait(futures);
+ final found = results.firstWhere((r) => r != null, orElse: () => null);
+ if (found != null) {
+ _mqttLog('MQTT: subnet scan found broker at $found');
+ return found;
+ }
}
}
}
--
Gitblit v1.3.1