feat: replace SSE client with direct TCP/WiFi connection

- Remove SseClientService and ConnectionMode.sseClient
- Add ConnectionMode.tcp with MeshCoreTcpService (port 5000)
- NetworkScannerService: scan TCP port 5000 via raw Socket.connect
- mDNS service type changed to _meshcore._tcp
- connection_dialog: connect via connectTcp() instead of connectToSseServer()
- home_screen: show WiFi icon and label for TCP mode
- Bump meshcore_client to pick up TCP transport support
This commit is contained in:
Janez T
2026-03-04 19:11:16 +01:00
parent c6b3b86c2f
commit 84a6f81c26
7 changed files with 349 additions and 1475 deletions

View File

@@ -6,6 +6,7 @@ import 'package:shared_preferences/shared_preferences.dart';
import 'package:vibration/vibration.dart';
import '../providers/connection_provider.dart';
import '../providers/app_provider.dart';
import '../models/device_info.dart' show ConnectionMode;
import '../providers/messages_provider.dart';
import '../providers/contacts_provider.dart';
import '../theme/app_theme.dart';
@@ -298,7 +299,7 @@ class _HomeScreenState extends State<HomeScreen>
builder: (context, provider, child) {
final isConnected =
provider.deviceInfo.isConnected ||
provider.isSseClientConnected;
provider.deviceInfo.isConnected;
if (isConnected) {
return IconButton(
onPressed: () async {
@@ -446,9 +447,9 @@ class _HomeScreenState extends State<HomeScreen>
return Consumer<ConnectionProvider>(
builder: (context, provider, child) {
final deviceInfo = provider.deviceInfo;
final isBleConnected = deviceInfo.isConnected;
final isSseConnected = provider.isSseClientConnected;
final isConnected = isBleConnected || isSseConnected;
final isConnected = deviceInfo.isConnected;
final isTcpConnected = provider.connectionMode == ConnectionMode.tcp;
final isBleConnected = isConnected && !isTcpConnected;
if (!isConnected) {
// Disconnected state: show connect button
@@ -536,10 +537,10 @@ class _HomeScreenState extends State<HomeScreen>
mainAxisSize: MainAxisSize.min,
children: [
Icon(
isSseConnected
isTcpConnected
? Icons.wifi
: Icons.bluetooth_connected,
color: isSseConnected
color: isTcpConnected
? Colors.green
: (deviceInfo.signalRssi != null
? BatteryDisplayHelper.getSignalColor(
@@ -561,10 +562,10 @@ class _HomeScreenState extends State<HomeScreen>
),
),
],
if (isSseConnected && !isBleConnected) ...[
if (isTcpConnected) ...[
const SizedBox(width: 3),
Text(
'SSE',
'WiFi',
style: const TextStyle(
fontSize: 11,
color: Colors.green,