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