提交
This commit is contained in:
88
src/main/app.ts
Normal file
88
src/main/app.ts
Normal file
@ -0,0 +1,88 @@
|
||||
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 };
|
||||
Reference in New Issue
Block a user