connect method
Implementation
Future<void> connect() async {
// Si fue disposed, resetear automáticamente para permitir primera conexión
if (_isDisposed) {
log('🔄 Reseteando estado disposed para conexión');
_isDisposed = false;
}
try {
// Asegurar que el command controller esté disponible
_ensureCommandController();
final wsUrl = serverUrl.replaceFirst('http', 'ws');
final uri = Uri.parse('$wsUrl/remote/$deviceMac?token=$token&type=device');
log('🔌 Intentando conectar a: $uri');
_channel = WebSocketChannel.connect(uri);
_channel!.stream.listen(
(message) {
if (!_isDisposed) {
_markActivity();
_handleMessage(jsonDecode(message));
}
},
onDone: () {
_isConnected = false;
log('❌ WebSocket desconectado');
},
onError: (error) {
_isConnected = false;
log('❌ Error WebSocket: $error');
},
);
// Esperar un momento para verificar la conexión
await Future.delayed(const Duration(milliseconds: 500));
_isConnected = true;
log('✅ WebSocket conectado exitosamente');
// Iniciar timer de inactividad al conectar
_markActivity();
} catch (e) {
log('❌ Error al conectar WebSocket: $e');
_isConnected = false;
rethrow;
}
}