| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- // electron/modules/ipc-registry.ts - IPC 处理器自动注册模块
- import { ipcMain, type IpcMainInvokeEvent } from 'electron'
- import logger from './logger'
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- type IpcHandler = (event: IpcMainInvokeEvent, ...args: any[]) => any
- // 存储所有已注册的 handler 名称
- const registeredHandlers = new Set<string>()
- /**
- * 注册 IPC 处理器
- * @param channel IPC 通道名称
- * @param handler 处理函数
- */
- export function registerHandler(channel: string, handler: IpcHandler): void {
- if (registeredHandlers.has(channel)) {
- logger.warn(`IPC handler "${channel}" 已存在,将被覆盖`)
- ipcMain.removeHandler(channel)
- }
- ipcMain.handle(channel, handler)
- registeredHandlers.add(channel)
- logger.debug(`已注册 IPC handler: ${channel}`)
- }
- /**
- * 批量注册 IPC 处理器
- * @param handlers 处理器映射对象
- */
- export function registerHandlers(handlers: Record<string, IpcHandler>): void {
- for (const [channel, handler] of Object.entries(handlers)) {
- registerHandler(channel, handler)
- }
- }
- /**
- * 移除指定的 IPC 处理器
- * @param channel IPC 通道名称
- */
- export function removeHandler(channel: string): void {
- if (registeredHandlers.has(channel)) {
- ipcMain.removeHandler(channel)
- registeredHandlers.delete(channel)
- logger.debug(`已移除 IPC handler: ${channel}`)
- }
- }
- /**
- * 移除所有已注册的 IPC 处理器
- */
- export function removeAllHandlers(): void {
- for (const channel of registeredHandlers) {
- ipcMain.removeHandler(channel)
- }
- const count = registeredHandlers.size
- registeredHandlers.clear()
- logger.info(`已移除所有 IPC handlers (共 ${count} 个)`)
- }
- /**
- * 获取所有已注册的 handler 名称
- */
- export function getRegisteredHandlers(): string[] {
- return Array.from(registeredHandlers)
- }
- /**
- * 检查 handler 是否已注册
- */
- export function isHandlerRegistered(channel: string): boolean {
- return registeredHandlers.has(channel)
- }
|