Lv110版本源码上传
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
import child_process from "node:child_process"
|
||||
import { join } from "node:path"
|
||||
import { app } from "electron"
|
||||
|
||||
const port: number = 17173
|
||||
|
||||
let instance: child_process.ChildProcess
|
||||
|
||||
/**
|
||||
* 开启python的api服务
|
||||
* @returns
|
||||
*/
|
||||
export function startServer() {
|
||||
judgeServerOpen(port).then(async res => {
|
||||
if (res) {
|
||||
console.log(`${port} is in used"`)
|
||||
await stopServer()
|
||||
}
|
||||
if (app.isPackaged) {
|
||||
// exec不会报错 spawn会抛错
|
||||
instance = child_process.exec("\"./resources/dnfcalc-api.exe\"", (_, stdout: any) => {
|
||||
console.log(stdout)
|
||||
})
|
||||
console.log("server started.")
|
||||
return
|
||||
}
|
||||
|
||||
const execCommand = process.platform === "win32" ? "python" : "python3"
|
||||
|
||||
instance = child_process.spawn(execCommand, [join(__dirname, "../../../api/main.py"), `${port}`])
|
||||
|
||||
if (instance) {
|
||||
console.log("server started.")
|
||||
instance.stdout?.pipe(process.stdout)
|
||||
instance.stderr?.pipe(process.stderr)
|
||||
instance.stdin?.pipe(process.stdin)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断端口是否被占用
|
||||
* @param port 端口号
|
||||
* @returns 该端口是否被占用
|
||||
*/
|
||||
function judgeServerOpen(port: number): Promise<boolean> {
|
||||
const order = `netstat -ano|findstr "${port}"`
|
||||
return new Promise<boolean>(resolve => {
|
||||
child_process.exec(order, (_: any, stdout: any) => {
|
||||
if (stdout === "") {
|
||||
resolve(false)
|
||||
} else {
|
||||
resolve(true)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭python的api服务
|
||||
* @returns
|
||||
*/
|
||||
export function stopServer(): Promise<string> {
|
||||
const order = process.platform == "win32" ? "taskkill /f /im dnfcalc-api.exe" : "taskkill /f /im python.exe"
|
||||
|
||||
return new Promise(resolve => {
|
||||
if (instance) {
|
||||
if (instance.kill(0) && instance.kill()) {
|
||||
console.log("server stoped.")
|
||||
}
|
||||
resolve("server stoped.")
|
||||
}
|
||||
child_process.exec(order, (_, stdout: string) => {
|
||||
// TODO 关闭python api
|
||||
resolve(stdout)
|
||||
})
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user