connect method

Future<void> connect()

Implementation

Future<void> connect() async {
  if (_isDisposed) {
    log('🔄 Reseteando estado disposed para nueva conexión');
    _isDisposed = false;
  }

  try {
    _ensureCommandController();

    final wsUrl = serverUrl.startsWith('https')
        ? serverUrl.replaceFirst('https', 'wss')
        : serverUrl.replaceFirst('http', 'ws');
    final uri = Uri.parse('$wsUrl/remote/$deviceMac?token=$token&type=device');

    log('🔌 Conectando WebSocket a: ${uri.replace(queryParameters: {'token': '***'})}');

    final factory = _channelFactory;
    _channel = factory != null ? factory(uri) : WebSocketChannel.connect(uri);

    _channel!.stream.listen(
      (message) {
        if (!_isDisposed) {
          _markActivity();
          try {
            final decoded = jsonDecode(message as String) as Map<String, dynamic>;
            _handleMessage(decoded);
          } catch (e) {
            log('⚠️ Error decodificando mensaje WebSocket: $e');
          }
        }
      },
      onDone: () {
        _isConnected = false;
        log('❌ WebSocket desconectado');
      },
      onError: (error) {
        _isConnected = false;
        log('❌ Error WebSocket: $error');
      },
    );

    _isConnected = true;
    _markActivity();
    log('✅ WebSocket inicializado');
  } catch (e) {
    _isConnected = false;
    log('❌ Error al conectar WebSocket: $e');
    rethrow;
  }
}