89 lines
2.2 KiB
TypeScript
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 };
|