diff --git a/src/main/services/utils.service.ts b/src/main/services/utils.service.ts index 1391b898..0d9043c7 100644 --- a/src/main/services/utils.service.ts +++ b/src/main/services/utils.service.ts @@ -4,6 +4,7 @@ import { homedir } from "os"; import path from "path"; import { BrowserWindow } from "electron"; import { rm } from "fs/promises"; +import { IpcResponse } from "shared/models/ipc-models.model"; export class UtilsService{ @@ -68,4 +69,8 @@ export class UtilsService{ this.mainWindow.webContents.send(channel, args); } + public newIpcSenc(channel: string, response: IpcResponse): void{ + this.mainWindow.webContents.send(channel, response); + } + } diff --git a/src/renderer/services/ipc.service.ts b/src/renderer/services/ipc.service.ts new file mode 100644 index 00000000..67722fac --- /dev/null +++ b/src/renderer/services/ipc.service.ts @@ -0,0 +1,40 @@ +import { Observable } from "rxjs"; +import { IpcRequest, IpcResponse } from "../../shared/models/ipc-models.model"; + +export class IpcService { + + private static instance: IpcService; + + public static getInstance(): IpcService{ + if(!IpcService.instance){ IpcService.instance = new IpcService(); } + return IpcService.instance; + } + + private constructor(){} + + public send(channel: string, request?: IpcRequest): Promise>{ + if(!request){ request = {args: null, responceChannel: null}; } + if(!request.responceChannel){ request.responceChannel = `${channel}_responce_${new Date().getTime()}`; } + + const promise = new Promise>(resolve => { + window.electron.ipcRenderer.once(request.responceChannel, (response: IpcResponse) => resolve(response)); + }); + + window.electron.ipcRenderer.sendMessage(channel, request); + + return promise; + } + + public sendLazy(channel: string, request?: IpcRequest): void{ + window.electron.ipcRenderer.sendMessage(channel, request); + } + + public watch(channel: string): Observable{ + return new Observable(observer => { + window.electron.ipcRenderer.on(channel, res => { + observer.next(res); + }); + }); + } + +} \ No newline at end of file diff --git a/src/shared/models/ipc-models.model.ts b/src/shared/models/ipc-models.model.ts new file mode 100644 index 00000000..fcf2070e --- /dev/null +++ b/src/shared/models/ipc-models.model.ts @@ -0,0 +1,10 @@ +export interface IpcRequest{ + args?: T, + responceChannel?: string +} + +export interface IpcResponse{ + data?: T, + error?: any, + success: boolean, +} \ No newline at end of file