2026-07-19 17:15:28 +08:00
|
|
|
import { contextBridge, ipcRenderer } from 'electron';
|
|
|
|
|
import { electronAPI } from '@electron-toolkit/preload';
|
2026-07-15 21:06:19 +08:00
|
|
|
|
|
|
|
|
// Custom APIs for renderer
|
2026-07-18 19:23:50 +08:00
|
|
|
const api = {
|
2026-07-19 17:15:28 +08:00
|
|
|
|
2026-07-18 19:23:50 +08:00
|
|
|
// 服务器管理
|
|
|
|
|
getServers: () => ipcRenderer.invoke('mqtt:get-servers'),
|
|
|
|
|
addServer: (config) => ipcRenderer.invoke('mqtt:add-server', config),
|
|
|
|
|
updateServer: (id, config) => ipcRenderer.invoke('mqtt:update-server', id, config),
|
|
|
|
|
deleteServer: (id) => ipcRenderer.invoke('mqtt:delete-server', id),
|
|
|
|
|
|
|
|
|
|
// 连接管理
|
|
|
|
|
connect: (id) => ipcRenderer.invoke('mqtt:connect', id),
|
|
|
|
|
disconnect: (id) => ipcRenderer.invoke('mqtt:disconnect', id),
|
|
|
|
|
|
|
|
|
|
// 主题管理
|
|
|
|
|
addTopic: (serverId, topic, qos) => ipcRenderer.invoke('mqtt:add-topic', serverId, topic, qos),
|
|
|
|
|
removeTopic: (serverId, topic) => ipcRenderer.invoke('mqtt:remove-topic', serverId, topic),
|
|
|
|
|
subscribe: (serverId, topic) => ipcRenderer.invoke('mqtt:subscribe', serverId, topic),
|
|
|
|
|
unsubscribe: (serverId, topic) => ipcRenderer.invoke('mqtt:unsubscribe', serverId, topic),
|
|
|
|
|
subscribeAll: (serverId) => ipcRenderer.invoke('mqtt:subscribe-all', serverId),
|
|
|
|
|
updateTopic: (serverId, topicId, topic, qos) =>
|
|
|
|
|
ipcRenderer.invoke('mqtt:update-topic', serverId, topicId, topic, qos),
|
|
|
|
|
|
|
|
|
|
// 消息发布
|
|
|
|
|
publish: (serverId, topic, payload, opts) =>
|
|
|
|
|
ipcRenderer.invoke('mqtt:publish', serverId, topic, payload, opts),
|
|
|
|
|
|
|
|
|
|
// 消息管理
|
|
|
|
|
getMessages: (serverId) => ipcRenderer.invoke('mqtt:get-messages', serverId),
|
|
|
|
|
getPublishHistory: (serverId) => ipcRenderer.invoke('mqtt:get-publish-history', serverId),
|
|
|
|
|
clearMessages: (serverId) => ipcRenderer.invoke('mqtt:clear-messages', serverId),
|
|
|
|
|
clearPublishHistory: (serverId) => ipcRenderer.invoke('mqtt:clear-publish-history', serverId),
|
|
|
|
|
|
|
|
|
|
// 事件监听
|
|
|
|
|
onStatusChange: (callback) => {
|
2026-07-19 17:15:28 +08:00
|
|
|
const handler = (_, data) => callback(data);
|
|
|
|
|
ipcRenderer.on('mqtt:status-change', handler);
|
|
|
|
|
return () => ipcRenderer.removeListener('mqtt:status-change', handler);
|
2026-07-18 19:23:50 +08:00
|
|
|
},
|
|
|
|
|
onMessage: (callback) => {
|
2026-07-19 17:15:28 +08:00
|
|
|
const handler = (_, data) => callback(data);
|
|
|
|
|
ipcRenderer.on('mqtt:message', handler);
|
|
|
|
|
return () => ipcRenderer.removeListener('mqtt:message', handler);
|
2026-07-18 19:23:50 +08:00
|
|
|
},
|
|
|
|
|
onSubscriptionChange: (callback) => {
|
2026-07-19 17:15:28 +08:00
|
|
|
const handler = (_, data) => callback(data);
|
|
|
|
|
ipcRenderer.on('mqtt:subscription-change', handler);
|
|
|
|
|
return () => ipcRenderer.removeListener('mqtt:subscription-change', handler);
|
2026-07-18 19:23:50 +08:00
|
|
|
},
|
|
|
|
|
onSubscriptionError: (callback) => {
|
2026-07-19 17:15:28 +08:00
|
|
|
const handler = (_, data) => callback(data);
|
|
|
|
|
ipcRenderer.on('mqtt:subscription-error', handler);
|
|
|
|
|
return () => ipcRenderer.removeListener('mqtt:subscription-error', handler);
|
2026-07-18 19:23:50 +08:00
|
|
|
},
|
|
|
|
|
onPublishError: (callback) => {
|
2026-07-19 17:15:28 +08:00
|
|
|
const handler = (_, data) => callback(data);
|
|
|
|
|
ipcRenderer.on('mqtt:publish-error', handler);
|
|
|
|
|
return () => ipcRenderer.removeListener('mqtt:publish-error', handler);
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
};
|
2026-07-15 21:06:19 +08:00
|
|
|
|
|
|
|
|
// Use `contextBridge` APIs to expose Electron APIs to
|
|
|
|
|
// renderer only if context isolation is enabled, otherwise
|
|
|
|
|
// just add to the DOM global.
|
|
|
|
|
if (process.contextIsolated) {
|
|
|
|
|
try {
|
2026-07-19 17:15:28 +08:00
|
|
|
contextBridge.exposeInMainWorld('electron', electronAPI);
|
|
|
|
|
contextBridge.exposeInMainWorld('api', api);
|
2026-07-15 21:06:19 +08:00
|
|
|
} catch (error) {
|
2026-07-19 17:15:28 +08:00
|
|
|
console.error(error);
|
2026-07-15 21:06:19 +08:00
|
|
|
}
|
|
|
|
|
} else {
|
2026-07-19 17:15:28 +08:00
|
|
|
window.electron = electronAPI;
|
|
|
|
|
window.api = api;
|
2026-07-15 21:06:19 +08:00
|
|
|
}
|