Files
electron-4/src/main/app.ts
2025-09-23 10:58:58 +08:00

89 lines
2.2 KiB
TypeScript

let net = require("net");
const express = require("express");
const path = require("path");
const { ipcMain } = require('electron');
// const bodyParser = require("body-parser");
import { GetHomeDir } from "./config";
let SERVER_PORTS = 55110;
/**
* 检测端口是否被占用
* @param port
* @param cb
*/
function portIsOccupied(port, cb) {
// 创建服务并监听该端口
port = Number(port);
let server = net.createServer().listen(port);
server.on("listening", function() {
// 执行这块代码说明端口未被占用
server.close(); // 关闭服务
console.log("端口【" + port + "】 可用"); // 控制台输出信息
SERVER_PORTS = port;
cb(port);
});
server.on("error", function(err) {
if (err.code === "EADDRINUSE") {
// 端口已经被使用
console.log("端口【" + port + "】 被占用");
portIsOccupied(++port, cb);
}
});
}
let apps;
let availablePort
function createApp() {
apps = express();
// app.use(bodyParser.json());
// app.use(bodyParser.urlencoded({ extended: true }));
let prefix =
process.env.NODE_ENV === "development"
? ""
: "resources/app.asar/out/renderer/";
let static_path = ["./", "src/renderer/public"];
let home_dir = GetHomeDir();
static_path.forEach((p) => {
apps.use(
express.static(
path.join(path.join(home_dir, prefix), p) /*{maxAge: 60 * 1000 * 5}*/
)
);
});
}
function start() {
createApp();
portIsOccupied(SERVER_PORTS, (port) => {
// avilablePort挂载全局
// console.log(apps);
apps.listen(port);
availablePort = port;
// console.log("global.sharedObject", global.avilablePort);
global.sharedObject.availablePort = port;
// ipcRenderer.invoke("set-global-variable", "avilablePort", avilablePort);
});
}
//获取项目根目录
// function GetHomeDir() {
// let HOME_DIR = process.cwd()
// if (process.env.NODE_ENV === 'production') {
// let arr = process.execPath.replaceAll("\\", "/").split("/")
// arr.pop()
// HOME_DIR = arr.join("/")
// }
// return HOME_DIR
// }
ipcMain.handle('get-available-port', () => {
return availablePort;
});
export { apps, start };