fix: ensureBridge rileva Firefox già attivo su 9222 (isPortOpen) e avvia solo il bridge
- isPortOpen(): check TCP su 127.0.0.1:9222 (Firefox Remote Agent non espone /json/version) - ensureBridge: ciclo 0 senza forceRestart → se porta aperta avvia solo il bridge, altrimenti startFirefox; cicli successivi riavviano Firefox (sessione orfana) - risolve il caso 'Firefox già attivo' (istanza --no-remote non agganciabile)
This commit is contained in:
@@ -29,6 +29,7 @@ import { spawn, execFile } from "node:child_process";
|
||||
import { readFileSync } from "node:fs";
|
||||
import { homedir } from "node:os";
|
||||
import { join } from "node:path";
|
||||
import { Socket } from "node:net";
|
||||
import { promisify } from "node:util";
|
||||
|
||||
const execFileAsync = promisify(execFile);
|
||||
@@ -253,6 +254,31 @@ async function waitBridgeReady(timeoutMs = 15_000): Promise<boolean> {
|
||||
* senza session.end), riavvia Firefox e riprova fino a MAX_BRIDGE_CYCLES.
|
||||
* Con forceRestart=true riavvia comunque (usato dopo errori di sessione).
|
||||
*/
|
||||
/**
|
||||
* Verifica se Firefox Remote Agent è già in ascolto sulla porta BiDi (9222).
|
||||
* Usato da ensureBridge per NON riavviare un Firefox già attivo (istanza
|
||||
* --no-remote non agganciabile dallo script di start).
|
||||
*/
|
||||
function isPortOpen(port: number, host = "127.0.0.1"): Promise<boolean> {
|
||||
return new Promise((resolve) => {
|
||||
const sock = new Socket();
|
||||
sock.setTimeout(2_000);
|
||||
sock.once("connect", () => {
|
||||
sock.destroy();
|
||||
resolve(true);
|
||||
});
|
||||
sock.once("timeout", () => {
|
||||
sock.destroy();
|
||||
resolve(false);
|
||||
});
|
||||
sock.once("error", () => {
|
||||
sock.destroy();
|
||||
resolve(false);
|
||||
});
|
||||
sock.connect(port, host);
|
||||
});
|
||||
}
|
||||
|
||||
async function ensureBridge(
|
||||
profile: "dedicated" | "main" = "dedicated",
|
||||
opts: { forceRestart?: boolean } = {},
|
||||
@@ -263,8 +289,12 @@ async function ensureBridge(
|
||||
log(`ciclo ${cycle}: riavvio Firefox (possibile sessione BiDi orfana)`);
|
||||
await execFileAsync(SCRIPT, ["stop"]).catch(() => {});
|
||||
await new Promise((r) => setTimeout(r, 1_500));
|
||||
await startFirefox(profile);
|
||||
} else if (!(await isPortOpen(9222))) {
|
||||
await startFirefox(profile);
|
||||
} else {
|
||||
log("Firefox già attivo su 9222: avvio solo il bridge");
|
||||
}
|
||||
await startFirefox(profile);
|
||||
await startBridgeProcess();
|
||||
if (await waitBridgeReady()) return;
|
||||
log(`ciclo ${cycle}: bridge non pronto, kill processo`);
|
||||
|
||||
Generated
+2031
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user