@@ -2,9 +2,13 @@ const { app, BrowserWindow, dialog, ipcMain, shell } = require('electron'); | |||||
const path = require('path'); | const path = require('path'); | ||||
const url = require('url'); | const url = require('url'); | ||||
const { initialStorageEvents, storage } = require('./storage'); | const { initialStorageEvents, storage } = require('./storage'); | ||||
const { initialWebsocketEvents } = require('./socket'); | |||||
const { Subject } = require('./tool'); | |||||
let mainWindow; | let mainWindow; | ||||
const socketMsgSubject = new Subject(); | |||||
function createWindow() { | function createWindow() { | ||||
//创建窗口 | //创建窗口 | ||||
mainWindow = new BrowserWindow({ | mainWindow = new BrowserWindow({ | ||||
@@ -44,12 +48,18 @@ function createWindow() { | |||||
}), | }), | ||||
); | ); | ||||
} | } | ||||
// 加载初始localStorage数据 | |||||
const onMessageReceive = (message) => { | |||||
mainWindow.webContents.send('socket:on-message', message); | |||||
}; | |||||
mainWindow.webContents.on('did-finish-load', () => { | mainWindow.webContents.on('did-finish-load', () => { | ||||
// 加载初始localStorage数据 | |||||
mainWindow.webContents.send('initialStorageData', storage.getAllItem()); | mainWindow.webContents.send('initialStorageData', storage.getAllItem()); | ||||
socketMsgSubject.add(onMessageReceive); | |||||
}); | }); | ||||
mainWindow.on('closed', () => { | mainWindow.on('closed', () => { | ||||
mainWindow = null; | mainWindow = null; | ||||
socketMsgSubject.remove(onMessageReceive); | |||||
}); | }); | ||||
} | } | ||||
@@ -106,3 +116,7 @@ app.on('window-all-closed', () => { | |||||
app.quit(); | app.quit(); | ||||
} | } | ||||
}); | }); | ||||
initialWebsocketEvents(function onMessage(message) { | |||||
socketMsgSubject.notify(message); | |||||
}); |
@@ -0,0 +1,23 @@ | |||||
const io = require('ws'); | |||||
function initialWebsocket(onMessage) { | |||||
const socket = new io('ws://127.0.0.1:7888/websocket/subscriptionTaskSync'); | |||||
socket.on('open', (socket) => { | |||||
// socket.emit("hello", "world"); | |||||
console.log('socket connection'); | |||||
socket.on('message', onMessage); | |||||
}); | |||||
socket.on('error', (...args) => { | |||||
// socket.emit("hello", "world"); | |||||
console.log('socket error:', args); | |||||
}); | |||||
} | |||||
module.exports.initialWebsocketEvents = function initialWebsocketEvents( | |||||
onMessage, | |||||
onError, | |||||
) { | |||||
initialWebsocket(); | |||||
// ipcMain.handle('socket:on', ) | |||||
}; |
@@ -0,0 +1,14 @@ | |||||
export class Subject { | |||||
constructor() { | |||||
this.observers = []; | |||||
} | |||||
add(observer) { | |||||
this.observers.push(observer); | |||||
} | |||||
remove(observer) { | |||||
this.observers = this.observers.filter((iO) => iO !== observer); | |||||
} | |||||
notify(...args) { | |||||
this.observers.forEach((f) => f(...args)); | |||||
} | |||||
} |
@@ -39,7 +39,8 @@ | |||||
"electron-packager": "^15.2.0", | "electron-packager": "^15.2.0", | ||||
"electron-store": "^8.0.0", | "electron-store": "^8.0.0", | ||||
"lodash": "^4.17.21", | "lodash": "^4.17.21", | ||||
"umi": "^3.4.25" | |||||
"umi": "^3.4.25", | |||||
"ws": "^7.5.2" | |||||
}, | }, | ||||
"devDependencies": { | "devDependencies": { | ||||
"@types/ali-oss": "^6.0.8", | "@types/ali-oss": "^6.0.8", | ||||
@@ -0,0 +1,11 @@ | |||||
export const isClient = !!window.ipcRenderer; // process.env.IS_CLIENT; | |||||
const safeCall = (f: (...args: any[]) => any) => (isClient ? f : () => {}); | |||||
const ipcRenderer = window.ipcRenderer; | |||||
if (isClient) { | |||||
window.addIpcRendererListener('socket:on-message', (_, message) => { | |||||
console.log('receive electron socket message:', message); | |||||
}); | |||||
} |