chenyincheng
2023-04-11 80356c3725c01cfd87aefcd3f0925327571a89d9
electron/main/index.ts
@@ -1,19 +1,46 @@
import { app, BrowserWindow, shell, ipcMain,Menu } from 'electron'
import { release } from 'os'
import { join } from 'path'
import logger from '../preload/logger.js'
import fs from 'fs'
import iconv from 'iconv-lite'
//koa----
import  Koa from 'koa';
import  Router from 'koa-router';
const koaBody = require('koa-body');
const creatorKoa=(win)=>{
  const app = new Koa();
  const router = new Router();
  app.use(koaBody({
  multipart: true
  }));
  router.get('/', async (ctx) => {
      ctx.body = 'Hello World!';
  });
  router.post('/postResult', async (ctx)=>{
  const body=ctx.request.body
  win?.webContents.send('message-koa',body)
  ctx.body={
      "code": 200,
      "data": body,
      "message": "接收成功"
  }
  })
  app.use(router.routes());
  app.listen(3131,()=>{
      console.log('koa Service start, port:3131')
  });
}
// 配制文件的读写实例
const Store = require('electron-store');
const  store = new Store();
console.log(store.path)
// 读
// console.log(store.get('clientCode'))
// console.log(store.get('deviceList'))
// 写
// store.set("testr","test001")
// Disable GPU Acceleration for Windows 7
if (release().startsWith('6.1')) app.disableHardwareAcceleration()
@@ -36,8 +63,8 @@
async function createWindow() {
  win = new BrowserWindow({
    title: 'Main window',
    fullscreen: true,
    autoHideMenuBar:true,
    // fullscreen: true,// 开启默认全屏
    // autoHideMenuBar:true, //关闭菜单栏
    webPreferences: {
      preload: splash,
      nodeIntegration: true,
@@ -53,10 +80,10 @@
  // Test active push message to Renderer-process
  // 测试推送消息到Renderer进程
  win.webContents.on('did-finish-load', () => {
    // win?.webContents.send('main-process-message', new Date().toLocaleString())
    creatorKoa(win)
    win?.webContents.send('getScreenTimeout',store.get('screenTimeout'))
    win?.webContents.send('getPcName',store.get('machineName'))
    win?.webContents.send('getConfigData',store.get('clientCode'),store.get('devices'),store.path)
    win?.webContents.send('getConfigData',store.get(),store.path)
  })
  // Make all links open with the browser, not with the application
@@ -75,7 +102,7 @@
app.on('second-instance', () => {
  if (win) {
    // Focus on the main window if the user tried to open another
    // 如果用户试图打开另一个窗口,则将焦点放在主窗口上
    if (win.isMinimized()) win.restore()
    win.focus()
  }
@@ -90,7 +117,7 @@
  }
})
// new window example arg: new windows url
// 新窗口示例arg:新的Windows url
ipcMain.handle("open-win", (event, arg) => {
  const childWindow = new BrowserWindow({
    webPreferences: {
@@ -107,6 +134,12 @@
    // childWindow.webContents.openDevTools({ mode: "undocked", activate: true })
  }
})
// 主进程处理日志定义
ipcMain.handle('logger', async(event, arg) => {  //与渲染进程通信
  return new Promise((resolve, reject) => {
    logger.info(arg)
  })
})
// 渲染端发送消息到主进程
ipcMain.on("winClose",()=>{
  win?.close()
@@ -118,18 +151,5 @@
    "clientCode": arg.clientCode,
    "machineName": arg.machineName,
    "screenTimeout": arg.screenTimeout,
    "devices":arg.devices
  }
  //对比两端配置文件
  if(JSON.stringify(mode1)!=JSON.stringify(mode2)){
    //更新cofing.json
    console.log('update confing.json')
    store.set(mode2)
    // 重新建立sockte 通讯
    win?.webContents.send('getScreenTimeout',store.get('screenTimeout'))
    win?.webContents.send('getPcName',store.get('machineName'))
    win?.webContents.send('getConfigData',store.get('clientCode'),store.get('devices'),store.path)
  }
})