start static method
Inicia el servidor HTTP y configura la conectividad de plataforma.
Si ya está corriendo, no hace nada. Loggea los endpoints disponibles y cómo configurar TESTBRIDGE_URL.
Implementation
static Future<void> start({
int? customPort,
String? customHost,
int? customForwardPort,
}) async {
Log.init(level: Level.SEVERE);
// Guard de producción: el server no debe correr en release builds.
// En release, los mecanismos de inspección (debugLayer, visitChildElements
// para debug info) no están disponibles o retornan datos incompletos.
if (!kDebugMode && !kProfileMode) {
Log.i(
'[Server] ⚠️ McpEventServer no debe correr en producción. Abortando.',
);
return;
}
if (_isRunning) {
Log.i('[Server] Ya corriendo en http://$host:$port');
return;
}
if (customPort != null) port = customPort;
if (customHost != null) host = customHost;
if (customForwardPort != null) forwardPort = customForwardPort;
try {
_server = await HttpServer.bind(host, port, shared: true);
_isRunning = true;
// Register lifecycle observer — auto-stops when the app closes
WidgetsBinding.instance.addObserver(_observer);
// Configure platform connectivity (ADB forward, iproxy, etc.)
final connectivity = await McpConnectivity.setup(
appPort: port,
forwardPort: forwardPort,
);
_logStartup(connectivity);
_server!.listen(
_handleRequest,
onError: (e) {
Log.i('[Server] Error: $e');
},
);
} catch (e) {
Log.i('[Server] ❌ No se pudo iniciar: $e');
_isRunning = false;
rethrow;
}
}