Pārlūkot izejas kodu

toggle http_api on/off.

oldj 4 gadi atpakaļ
vecāks
revīzija
beae22fdd2
3 mainītis faili ar 46 papildinājumiem un 14 dzēšanām
  1. 9 0
      src/main/actions/config/update.ts
  2. 31 13
      src/main/http/index.ts
  3. 6 1
      src/main/main.ts

+ 9 - 0
src/main/actions/config/update.ts

@@ -7,6 +7,7 @@ import { updateTrayTitle } from '@main/actions'
 import { cfgdb } from '@main/data'
 import { makeMainMenu } from '@main/libs/menu'
 import { ConfigsType } from '@root/common/default_configs'
+import * as http_api from '@main/http'
 
 export default async (data: Partial<ConfigsType>) => {
   const old_configs = (await cfgdb.dict.cfg.all()) as ConfigsType
@@ -17,4 +18,12 @@ export default async (data: Partial<ConfigsType>) => {
   if (old_configs.locale !== data.locale) {
     makeMainMenu(data.locale)
   }
+
+  if (old_configs.http_api_on !== data.http_api_on) {
+    if (data.http_api_on) {
+      http_api.start()
+    } else {
+      http_api.stop()
+    }
+  }
 }

+ 31 - 13
src/main/http/index.ts

@@ -4,32 +4,50 @@
  * @homepage: https://oldj.net
  */
 
-import express from 'express'
 import { http_api_port } from '@root/common/constants'
+import express from 'express'
+import { Server } from 'http'
 import api_router from './api/index'
 
-export const server = express()
+const app = express()
 
-server.use((req, res, next) => {
+app.use((req, res, next) => {
   console.log(`> "${(new Date()).toString()}"`, req.method, req.originalUrl, `"${req.headers['user-agent']}"`)
   next()
 })
 
-server.get('/', (req, res) => {
+app.get('/', (req, res) => {
   res.send('Hello SwitchHosts!')
 })
 
-server.get('/remote-test', (req, res) => {
+app.get('/remote-test', (req, res) => {
   res.send(`# remote-test\n# ${(new Date()).toString()}`)
 })
 
-server.use('/api', api_router)
+app.use('/api', api_router)
+
+let server: Server
+
+export const start = (): boolean => {
+  try {
+    server = app.listen(http_api_port, '127.0.0.1', function () {
+      console.log(`SwitchHosts HTTP server is listening on port ${http_api_port}!`)
+      console.log(`-> http://127.0.0.1:${http_api_port}`)
+    })
+  } catch (e) {
+    console.error(e)
+    return false
+  }
+
+  return true
+}
+
+export const stop = () => {
+  if (!server) return
 
-try {
-  server.listen(http_api_port, '127.0.0.1', function () {
-    console.log(`SwitchHosts HTTP server is listening on port ${http_api_port}!`)
-    console.log(`-> http://127.0.0.1:${http_api_port}`)
-  })
-} catch (e) {
-  console.error(e)
+  try {
+    server.close()
+  } catch (e) {
+    console.error(e)
+  }
 }

+ 6 - 1
src/main/main.ts

@@ -7,7 +7,7 @@ import * as cron from '@main/libs/cron'
 import getIndex from '@main/libs/getIndex'
 import isDev from '@main/libs/isDev'
 import { makeMainMenu } from '@main/libs/menu'
-import '@main/http'
+import * as http_api from '@main/http'
 import '@main/tray'
 import version from '@root/version.json'
 import { app, BrowserWindow } from 'electron'
@@ -118,6 +118,11 @@ app.on('ready', async () => {
   global.session_id = uuid4()
   await createWindow()
   cron.start()
+
+  let http_api_on = await configGet('http_api_on')
+  if (http_api_on) {
+    http_api.start()
+  }
 })
 
 app.on('window-all-closed', () => {