diff --git a/electron/controller/example.js b/electron/controller/example.js index 5b7c5f4..ddb57c4 100644 --- a/electron/controller/example.js +++ b/electron/controller/example.js @@ -11,6 +11,7 @@ const electronApp = require('electron').app; const {dialog, webContents, shell, BrowserWindow, BrowserView, Notification, powerMonitor, screen, nativeTheme} = require('electron'); const autoLaunchManager = require('../library/autoLaunch'); +const dayjs = require('dayjs'); let myTimer = null; let browserViewObj = null; @@ -29,7 +30,7 @@ class ExampleController extends Controller { /** * 所有方法接收两个参数 * @param args 前端传的参数 - * @param event - IpcMainEvent 文档:https://www.electronjs.org/docs/latest/api/structures/ipc-main-event + * @param event - ipc通信时才有值。invoke()方法时,event == IpcMainInvokeEvent; send()/sendSync()方法时,event == IpcMainEvent */ /** @@ -580,7 +581,32 @@ class ExampleController extends Controller { shell.openPath(dir); return true; - } + } + + /** + * 异步消息类型 + * @param args 前端传的参数 + * @param event - IpcMainInvokeEvent 文档:https://www.electronjs.org/zh/docs/latest/api/structures/ipc-main-invoke-event + */ + async ipcInvokeMsg (args, event) { + let timeNow = dayjs().format('YYYY-MM-DD HH:mm:ss'); + const data = args + ' - ' + timeNow; + + return data; + } + + /** + * 同步消息类型 + * @param args 前端传的参数 + * @param event - IpcMainEvent 文档:https://www.electronjs.org/docs/latest/api/structures/ipc-main-event + */ + async ipcSendSyncMsg (args) { + let timeNow = dayjs().format('YYYY-MM-DD HH:mm:ss'); + const data = args + ' - ' + timeNow; + + return data; + } + } module.exports = ExampleController; diff --git a/frontend/src/api/main.js b/frontend/src/api/main.js index a669bef..3a034aa 100644 --- a/frontend/src/api/main.js +++ b/frontend/src/api/main.js @@ -28,6 +28,8 @@ const ipcApiRoute = { checkHttpServer: 'controller.example.checkHttpServer', doHttpRequest: 'controller.example.doHttpRequest', doSocketRequest: 'controller.example.doSocketRequest', + ipcInvokeMsg: 'controller.example.ipcInvokeMsg', + ipcSendSyncMsg: 'controller.example.ipcSendSyncMsg', } const specialIpcRoute = { diff --git a/frontend/src/utils/ipcRenderer.js b/frontend/src/utils/ipcRenderer.js index a442ad6..7a9d9ae 100644 --- a/frontend/src/utils/ipcRenderer.js +++ b/frontend/src/utils/ipcRenderer.js @@ -1,6 +1,7 @@ const { ipcRenderer: ipc } = window.require && window.require('electron') || {} + /** - * 异步调用主函数 + * (将废弃,请使用 $ipcInvoke 代替)异步调用主函数 * @param ipc * @param channel * @param param @@ -8,8 +9,6 @@ const { ipcRenderer: ipc } = window.require && window.require('electron') || {} */ const call = (ipc, channel, param) => { return new Promise((resolve) => { - // 声明渲染进程函数, 用于主进程函数回调, 返回数据 - // 调用主进程函数 ipc.once(channel, (event, result) => { console.log('[ipcRenderer] [call] result:', result) resolve(result) @@ -18,9 +17,35 @@ const call = (ipc, channel, param) => { }) } +/** + * 发送异步消息(invoke/handle 模型) + * @param ipc + * @param channel + * @param param + * @returns {Promise} + */ +const invoke = (ipc, channel, param) => { + const message = ipc.invoke(channel, param); + return message; +} + +/** + * 发送同步消息(send/on 模型) + * @param ipc + * @param channel + * @param param + * @returns {Any} + */ +const sendSync = (ipc, channel, param) => { + const message = ipc.sendSync(channel, param); + return message; +} + export default { install(Vue) { Vue.prototype.$ipc = ipc // 全局注入ipc - Vue.prototype.$ipcCall = (channel, param) => call(ipc, channel, param) // 全局注入调用主进程函数的方法 + Vue.prototype.$ipcCall = (channel, param) => call(ipc, channel, param) + Vue.prototype.$ipcInvoke = (channel, param) => invoke(ipc, channel, param) + Vue.prototype.$ipcSendSync = (channel, param) => sendSync(ipc, channel, param) } } diff --git a/frontend/src/views/base/socket/Ipc.vue b/frontend/src/views/base/socket/Ipc.vue index fca5e8c..fc83f30 100644 --- a/frontend/src/views/base/socket/Ipc.vue +++ b/frontend/src/views/base/socket/Ipc.vue @@ -1,5 +1,33 @@ diff --git a/package.json b/package.json index 8308bb0..fc60b47 100755 --- a/package.json +++ b/package.json @@ -96,7 +96,7 @@ }, "dependencies": { "dayjs": "^1.10.7", - "ee-core": "^1.2.2", + "ee-core": "^1.2.3", "electron-is": "^3.0.0", "lodash": "^4.17.21" }