mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-16 22:50:13 +01:00
This commit is contained in:
parent
fbfbe1b0ce
commit
1715b150a2
3 changed files with 57 additions and 50 deletions
|
|
@ -34,7 +34,6 @@ const isDevEnv = process.env.NODE_ENV === 'development'
|
|||
const appVer = app.getVersion()
|
||||
const confDir = path.join(app.getPath('home'), '.config', 'siyuan')
|
||||
const windowStatePath = path.join(confDir, 'windowState.json')
|
||||
const portJSONPath = path.join(confDir, 'port.json')
|
||||
let tray // 托盘必须使用全局变量,以防止被垃圾回收 https://www.electronjs.org/docs/faq#my-apps-windowtray-disappeared-after-a-few-minutes
|
||||
let mainWindow // 从托盘处激活报错 https://github.com/siyuan-note/siyuan/issues/769
|
||||
let firstOpenWindow, bootWindow
|
||||
|
|
@ -42,7 +41,6 @@ let closeButtonBehavior = 0
|
|||
let siyuanOpenURL
|
||||
let firstOpen = false
|
||||
let resetWindowStateOnRestart = false
|
||||
let kernelPort = "6806"
|
||||
const localhost = "127.0.0.1"
|
||||
require('@electron/remote/main').initialize()
|
||||
|
||||
|
|
@ -51,10 +49,6 @@ if (!app.requestSingleInstanceLock()) {
|
|||
return
|
||||
}
|
||||
|
||||
const getServer = () => {
|
||||
return "http://" + localhost + ":" + kernelPort
|
||||
}
|
||||
|
||||
const showErrorWindow = (title, content) => {
|
||||
let errorHTMLPath = path.join(appDir, 'app', 'electron', 'error.html')
|
||||
if (isDevEnv) {
|
||||
|
|
@ -554,6 +548,46 @@ const boot = () => {
|
|||
}
|
||||
}
|
||||
|
||||
let kernelPort = 6806
|
||||
let tryGetPortCount = 0
|
||||
const net = require("net");
|
||||
const getAvailablePort = (port = kernelPort) => {
|
||||
// https://gist.github.com/mikeal/1840641
|
||||
|
||||
const server = net.createServer()
|
||||
return new Promise((resolve, reject) => server
|
||||
.on('error', error => {
|
||||
writeLog(error)
|
||||
if (2048 < ++tryGetPortCount) {
|
||||
writeLog('failed to get available port [tryCount=' + tryGetPortCount + ', port=' + port + ']')
|
||||
reject(error)
|
||||
return
|
||||
}
|
||||
server.listen(++port)
|
||||
})
|
||||
.on('listening', () => {
|
||||
writeLog('found an available port [' + port + ']')
|
||||
server.close(() => resolve(port))
|
||||
})
|
||||
.listen(port, '127.0.0.1'))
|
||||
}
|
||||
|
||||
const getKernelPort = async () => {
|
||||
if (isDevEnv) {
|
||||
writeLog("got kernel port [" + kernelPort + "]")
|
||||
return kernelPort
|
||||
}
|
||||
|
||||
// 改进桌面端拉起内核 https://github.com/siyuan-note/siyuan/issues/6894
|
||||
kernelPort = await getAvailablePort()
|
||||
writeLog("got kernel available port [" + kernelPort + "]")
|
||||
return kernelPort
|
||||
}
|
||||
|
||||
const getServer = () => {
|
||||
return "http://" + localhost + ":" + kernelPort
|
||||
}
|
||||
|
||||
const initKernel = (initData) => {
|
||||
return new Promise(async (resolve) => {
|
||||
bootWindow = new BrowserWindow({
|
||||
|
|
@ -577,7 +611,8 @@ const initKernel = (initData) => {
|
|||
return
|
||||
}
|
||||
|
||||
const cmds = ['--wd', appDir]
|
||||
const availablePort = await getKernelPort()
|
||||
const cmds = ['--port', availablePort, '--wd', appDir]
|
||||
if (isDevEnv) {
|
||||
cmds.push('--mode', 'dev')
|
||||
}
|
||||
|
|
@ -639,44 +674,6 @@ const initKernel = (initData) => {
|
|||
})
|
||||
}
|
||||
|
||||
const getKernelPort = async () => {
|
||||
if (isDevEnv) {
|
||||
return kernelPort
|
||||
}
|
||||
|
||||
await sleep(200)
|
||||
let gotPort = false
|
||||
let count = 0
|
||||
while (!gotPort) {
|
||||
try {
|
||||
const portJSON = JSON.parse(fs.readFileSync(portJSONPath, 'utf8'))
|
||||
const ret = portJSON[kernelProcessPid]
|
||||
if (ret) {
|
||||
gotPort = true
|
||||
return ret
|
||||
}
|
||||
await sleep(100)
|
||||
} catch (e) {
|
||||
await sleep(100)
|
||||
} finally {
|
||||
count++
|
||||
if (64 < count) {
|
||||
writeLog('get kernel port failed [pid=' + kernelProcessPid + ']')
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
kernelPort = await getKernelPort()
|
||||
if (!kernelPort) {
|
||||
showErrorWindow('⚠️ 获取内核服务端口失败 Failed to get kernel serve port',
|
||||
'<div>获取内核服务端口失败,请确保程序拥有网络权限并不受防火墙和杀毒软件阻止。</div><div>Failed to get kernel serve port, please make sure the program has network permissions and is not blocked by firewalls and antivirus software.</div>')
|
||||
bootWindow.destroy()
|
||||
resolve(false)
|
||||
}
|
||||
writeLog("got kernel port [" + kernelPort + "]")
|
||||
|
||||
let gotVersion = false
|
||||
let apiData
|
||||
let count = 0
|
||||
|
|
@ -696,8 +693,12 @@ const initKernel = (initData) => {
|
|||
count++
|
||||
if (14 < count) {
|
||||
writeLog('get kernel ver failed')
|
||||
|
||||
showErrorWindow('⚠️ 获取内核服务端口失败 Failed to get kernel serve port',
|
||||
'<div>获取内核服务端口失败,请确保程序拥有网络权限并不受防火墙和杀毒软件阻止。</div><div>Failed to get kernel serve port, please make sure the program has network permissions and is not blocked by firewalls and antivirus software.</div>')
|
||||
bootWindow.destroy()
|
||||
resolve(false)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue