connect method

Future<void> connect()

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;
  }
}