mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-07-15 21:03:47 +00:00
fix: electron backend not starting
This commit is contained in:
+5
-1
@@ -423,6 +423,7 @@ app.commandLine.appendSwitch("--enable-features=NetworkService");
|
|||||||
|
|
||||||
let mainWindow = null;
|
let mainWindow = null;
|
||||||
let backendProcess = null;
|
let backendProcess = null;
|
||||||
|
let backendStartFailed = false;
|
||||||
let tray = null;
|
let tray = null;
|
||||||
let isQuitting = false;
|
let isQuitting = false;
|
||||||
|
|
||||||
@@ -657,6 +658,9 @@ function startBackendServer() {
|
|||||||
|
|
||||||
backendProcess.on("exit", (code, signal) => {
|
backendProcess.on("exit", (code, signal) => {
|
||||||
logToFile(`Backend process exited with code ${code}, signal ${signal}`);
|
logToFile(`Backend process exited with code ${code}, signal ${signal}`);
|
||||||
|
if (!resolved && code !== 0) {
|
||||||
|
backendStartFailed = true;
|
||||||
|
}
|
||||||
backendProcess = null;
|
backendProcess = null;
|
||||||
if (!resolved) {
|
if (!resolved) {
|
||||||
resolved = true;
|
resolved = true;
|
||||||
@@ -1092,7 +1096,7 @@ ipcMain.handle("get-platform", () => {
|
|||||||
|
|
||||||
ipcMain.handle("get-embedded-server-status", () => {
|
ipcMain.handle("get-embedded-server-status", () => {
|
||||||
return {
|
return {
|
||||||
running: backendProcess !== null && !backendProcess.killed,
|
running: backendProcess !== null && !backendProcess.killed && !backendStartFailed,
|
||||||
embedded: !isDev,
|
embedded: !isDev,
|
||||||
dataDir: isDev ? null : getBackendDataDir(),
|
dataDir: isDev ? null : getBackendDataDir(),
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2021,12 +2021,15 @@ httpServer.on("error", (err: NodeJS.ErrnoException) => {
|
|||||||
throw err;
|
throw err;
|
||||||
});
|
});
|
||||||
|
|
||||||
httpServer.listen(HTTP_PORT, async () => {
|
export const serverReady = new Promise<void>((resolve) => {
|
||||||
if (!fs.existsSync(uploadsDir)) {
|
httpServer.listen(HTTP_PORT, async () => {
|
||||||
fs.mkdirSync(uploadsDir, { recursive: true });
|
if (!fs.existsSync(uploadsDir)) {
|
||||||
}
|
fs.mkdirSync(uploadsDir, { recursive: true });
|
||||||
|
}
|
||||||
|
|
||||||
await initializeSecurity();
|
await initializeSecurity();
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const sslConfig = AutoSSLSetup.getSSLConfig();
|
const sslConfig = AutoSSLSetup.getSSLConfig();
|
||||||
|
|||||||
@@ -137,7 +137,8 @@ import {
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
await import("./database/database.js");
|
const dbServer = await import("./database/database.js");
|
||||||
|
await (dbServer as unknown as { serverReady: Promise<void> }).serverReady;
|
||||||
await import("./ssh/terminal.js");
|
await import("./ssh/terminal.js");
|
||||||
await import("./ssh/tunnel.js");
|
await import("./ssh/tunnel.js");
|
||||||
await import("./ssh/file-manager.js");
|
await import("./ssh/file-manager.js");
|
||||||
|
|||||||
@@ -143,14 +143,11 @@ export function ElectronLoginForm({
|
|||||||
{t("serverConfig.changeServer")}
|
{t("serverConfig.changeServer")}
|
||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
{!isEmbeddedServer && (
|
<div className="flex-1 mx-4 text-center">
|
||||||
<div className="flex-1 mx-4 text-center">
|
<span className="text-muted-foreground text-sm truncate block">
|
||||||
<span className="text-muted-foreground text-sm truncate block">
|
{isEmbeddedServer ? t("serverConfig.localServer") : displayUrl}
|
||||||
{displayUrl}
|
</span>
|
||||||
</span>
|
</div>
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
{isEmbeddedServer && <div className="flex-1" />}
|
|
||||||
<button
|
<button
|
||||||
onClick={handleRefresh}
|
onClick={handleRefresh}
|
||||||
className="p-2 text-foreground hover:text-primary transition-colors"
|
className="p-2 text-foreground hover:text-primary transition-colors"
|
||||||
|
|||||||
@@ -91,7 +91,8 @@ export function ElectronServerConfig({
|
|||||||
setError(null);
|
setError(null);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const maxRetries = 10;
|
await new Promise((r) => setTimeout(r, 1500));
|
||||||
|
const maxRetries = 15;
|
||||||
for (let i = 0; i < maxRetries; i++) {
|
for (let i = 0; i < maxRetries; i++) {
|
||||||
if (await probeBackend()) {
|
if (await probeBackend()) {
|
||||||
setEmbeddedMode(true);
|
setEmbeddedMode(true);
|
||||||
|
|||||||
@@ -31,7 +31,8 @@
|
|||||||
"useEmbedded": "Use Local Server",
|
"useEmbedded": "Use Local Server",
|
||||||
"embeddedDesc": "Run Termix with the built-in local server (no remote server needed)",
|
"embeddedDesc": "Run Termix with the built-in local server (no remote server needed)",
|
||||||
"embeddedConnecting": "Connecting to local server...",
|
"embeddedConnecting": "Connecting to local server...",
|
||||||
"embeddedNotReady": "Local server is not ready yet. Please wait a moment and try again."
|
"embeddedNotReady": "Local server is not ready yet. Please wait a moment and try again.",
|
||||||
|
"localServer": "Local Server"
|
||||||
},
|
},
|
||||||
"versionCheck": {
|
"versionCheck": {
|
||||||
"error": "Version Check Error",
|
"error": "Version Check Error",
|
||||||
|
|||||||
Reference in New Issue
Block a user