Compare commits

..

2 Commits

  1. 1
      .gitignore
  2. 2
      main.js
  3. 2897
      package-lock.json
  4. 59
      package.json
  5. 35
      preload.js

1
.gitignore vendored

@ -2,3 +2,4 @@
/dist /dist
/.vscode /.vscode
out/ out/
release/

2
main.js

@ -5,6 +5,8 @@ const { SensorController } = require('./src/business/sensor-controller')
const { UsbSerialBridge } = require('./src/business/usb-serial-bridge') const { UsbSerialBridge } = require('./src/business/usb-serial-bridge')
const pkg = require('./package.json') const pkg = require('./package.json')
if (require('electron-squirrel-startup')) app.quit()
const cacheDir = app.getPath('userData') const cacheDir = app.getPath('userData')
const cacheFile = path.join(cacheDir, 'app-cache.json') const cacheFile = path.join(cacheDir, 'app-cache.json')
const fileRoot = path.join(cacheDir, 'files') const fileRoot = path.join(cacheDir, 'files')

2897
package-lock.json generated

File diff suppressed because it is too large Load Diff

59
package.json

@ -1,12 +1,13 @@
{ {
"name": "photovoltaic-pc", "name": "光伏pc端应用",
"version": "1.0.0", "version": "1.0.0",
"description": "光伏pc端应用", "description": "光伏pc端应用photovoltaic-pc",
"main": "main.js", "main": "main.js",
"scripts": { "scripts": {
"start": "electron-forge start", "start": "electron-forge start",
"package": "electron-forge package", "package": "electron-builder --dir",
"make": "electron-forge make", "make": "electron-builder --win nsis",
"make:squirrel": "electron-forge make",
"test": "echo \"Error: no test specified\" && exit 1" "test": "echo \"Error: no test specified\" && exit 1"
}, },
"keywords": [], "keywords": [],
@ -21,10 +22,58 @@
"@electron-forge/plugin-auto-unpack-natives": "^7.11.2", "@electron-forge/plugin-auto-unpack-natives": "^7.11.2",
"@electron-forge/plugin-fuses": "^7.11.2", "@electron-forge/plugin-fuses": "^7.11.2",
"@electron/fuses": "^1.8.0", "@electron/fuses": "^1.8.0",
"electron": "^43.2.0" "electron": "^43.2.0",
"electron-builder": "^26.15.3"
}, },
"dependencies": { "dependencies": {
"electron-squirrel-startup": "^1.0.1", "electron-squirrel-startup": "^1.0.1",
"serialport": "^13.0.0" "serialport": "^13.0.0"
},
"build": {
"appId": "com.bestway.photovoltaic.pc",
"productName": "photovoltaic-pc",
"asar": true,
"asarUnpack": [
"**/*.node"
],
"npmRebuild": false,
"directories": {
"output": "release"
},
"files": [
"main.js",
"preload.js",
"package.json",
"dist/**/*",
"src/**/*",
"node_modules/**/*",
"!out/**/*",
"!release/**/*",
"!.git/**/*",
"!.vs/**/*",
"!.vscode/**/*"
],
"win": {
"target": [
{
"target": "nsis",
"arch": [
"x64"
]
}
],
"artifactName": "${productName}-${version}-${arch}-Setup.${ext}",
"signAndEditExecutable": false
},
"nsis": {
"oneClick": false,
"perMachine": false,
"allowToChangeInstallationDirectory": true,
"createDesktopShortcut": true,
"createStartMenuShortcut": true,
"shortcutName": "photovoltaic-pc",
"runAfterFinish": true,
"deleteAppDataOnUninstall": false
}
} }
} }

35
preload.js

@ -10,6 +10,7 @@
const { contextBridge, ipcRenderer } = require('electron') const { contextBridge, ipcRenderer } = require('electron')
const nodeNet = require('net') const nodeNet = require('net')
const dns = require('dns') const dns = require('dns')
const { execFile } = require('child_process')
function tryConnect(host, port, timeout) { function tryConnect(host, port, timeout) {
return new Promise((resolve) => { return new Promise((resolve) => {
@ -22,17 +23,41 @@ function tryConnect(host, port, timeout) {
}) })
} }
function normalizePingHost(input) {
const raw = String(input || '').trim()
if (!raw) return ''
try {
return new URL(raw).hostname
} catch {}
return raw.replace(/^https?:\/\//i, '').split('/')[0].split(':')[0]
}
function trySystemPing(host, timeout) {
return new Promise((resolve) => {
const wait = Math.max(1000, Number(timeout) || 2000)
execFile('ping', ['-n', '1', '-w', String(wait), host], { windowsHide: true }, (err) => {
resolve(!err)
})
})
}
const net = { const net = {
async ping(host, timeout) { async ping(host, timeout) {
const target = normalizePingHost(host)
if (!target) return false
const wait = Math.max(1000, Number(timeout) || 2000)
const isIp = nodeNet.isIP(target) !== 0
try { try {
await dns.promises.resolve(host) if (!isIp) await dns.promises.lookup(target)
} catch { } catch {
return false if (!await trySystemPing(target, wait)) return false
} }
for (const port of [443, 80]) {
if (await tryConnect(host, port, timeout)) return true for (const port of [443, 80, 53]) {
if (await tryConnect(target, port, wait)) return true
} }
return false return trySystemPing(target, wait)
} }
} }

Loading…
Cancel
Save