From 3e18b833c670a378fe06e76e484aa8ac52daf57b Mon Sep 17 00:00:00 2001 From: Dmitriy Petrov Date: Fri, 8 May 2026 19:41:24 +0300 Subject: [PATCH] =?UTF-8?q?style:=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=BA=D0=B0=D0=B2=D1=8B=D1=87=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=B2=20=D0=BA=D0=BE=D0=B4=D0=B5=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D0=B5=D0=B4=D0=B8=D0=BD=D0=BE=D0=BE=D0=B1=D1=80=D0=B0=D0=B7?= =?UTF-8?q?=D0=B8=D1=8F=20Refs:=20None?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/index.js | 43 +++++++++++++++++++++++++++++++------------ 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/src/server/index.js b/src/server/index.js index e83bba9..e2440a5 100644 --- a/src/server/index.js +++ b/src/server/index.js @@ -17,7 +17,7 @@ const APPLY_HISTORY_LIMIT = 10; fs.mkdirSync(settings.dataDir, { recursive: true }); -const SINGBOX_PID_FILE = path.join(settings.dataDir, 'singbox.pid'); +const SINGBOX_PID_FILE = path.join(settings.dataDir, "singbox.pid"); let singboxProcess = null; let singboxStartedAt = null; @@ -52,24 +52,34 @@ function parseSingboxLevel(line, fallback) { // ─── PID helpers ──────────────────────────────────────────────────────────── function saveSingboxPid(pid) { - try { fs.writeFileSync(SINGBOX_PID_FILE, String(pid), 'utf8'); } catch {} + try { + fs.writeFileSync(SINGBOX_PID_FILE, String(pid), "utf8"); + } catch {} } function readSingboxPid() { try { - const pid = parseInt(fs.readFileSync(SINGBOX_PID_FILE, 'utf8').trim(), 10); + const pid = parseInt(fs.readFileSync(SINGBOX_PID_FILE, "utf8").trim(), 10); return Number.isFinite(pid) && pid > 0 ? pid : null; - } catch { return null; } + } catch { + return null; + } } function removeSingboxPid() { - try { fs.unlinkSync(SINGBOX_PID_FILE); } catch {} + try { + fs.unlinkSync(SINGBOX_PID_FILE); + } catch {} } function isPidAlive(pid) { if (!pid) return false; - try { process.kill(pid, 0); return true; } - catch { return false; } + try { + process.kill(pid, 0); + return true; + } catch { + return false; + } } /** @@ -83,8 +93,14 @@ function attachExistingSingbox(pid) { let exitCb = null; singboxProcess = { pid, - kill: (sig = 'SIGTERM') => { try { process.kill(pid, sig); } catch {} }, - once: (event, cb) => { if (event === 'exit') exitCb = cb; }, + kill: (sig = "SIGTERM") => { + try { + process.kill(pid, sig); + } catch {} + }, + once: (event, cb) => { + if (event === "exit") exitCb = cb; + }, }; // Периодически проверяем, что процесс ещё жив @@ -95,13 +111,16 @@ function attachExistingSingbox(pid) { singboxProcess = null; singboxStartedAt = null; removeSingboxPid(); - pushLog('warning', `sing-box (pid=${pid}) завершился`); + pushLog("warning", `sing-box (pid=${pid}) завершился`); + } + if (exitCb) { + exitCb(null, null); + exitCb = null; } - if (exitCb) { exitCb(null, null); exitCb = null; } } }, 2000); - pushLog('info', `sing-box подхвачен при старте (pid=${pid})`); + pushLog("info", `sing-box подхвачен при старте (pid=${pid})`); } function captureStream(stream, fallbackLevel) {