#angular #electron
#angular #electron
Вопрос:
Я знаю, как отправить сообщение или вызвать функцию из приложения angular в основной поток electron с помощью ipc.
Но в моем случае у меня есть какой-то поток, запущенный в основном потоке electron, например, обработка видео, и после некоторого процесса завершения файла electron требует отправки сообщения и параметра для обновления angular GUI.
Как основной поток electron (main.ts) может вызвать или вызвать angular EventEmitter для отправки некоторых данных обратно в приложение angular.
Ответ №1:
После попытки решить это действие в течение нескольких дней. Решение I для этого сценария — просто создать дескриптор ipcMain в main.ts и сохранить объект события для обратного вызова angular.
Структура папок проекта:
- электронный проект
- приложение angular
- app.com.ts
- app.com.html
- main.ts
- myelectron.com.ts
- EventStore.ts
- myelectonProcess.com.ts
- приложение angular
- в приложении angular 1.1 конструктор — зарегистрировать обратный вызов ipcRenderer для получения сообщения от electron 1.2 конструктор — вызвать ipcMain в electron для принудительного создания объекта события.
constructor(private electronService: ElectronService)
{
this.registerIPC();
}
registerIPC()
{
//register callback ipcRenderer to receipt message from electron
this.electronService.ipcRenderer.on('my_process_msg', (event, result) => {
this.processing = resu<
//TODO do you logic here
});
//call ipcMain in electron to force create event object.
this.electronService.ipcRenderer.send('my_process_msg');
}
- в electron main.ts при инициализации просто создайте объект myelectorn.com.ts
//TODO your code
const main = () =>
{
const myElec = new MyElectronCom();
myElec.registerIpcMain();
}
//TODO your code
main();
- в myelectron.com.ts — constructor — зарегистрируйте ipcMain.handle для получения первого подключения от angular. И сохраните этот объект события как глобальный объект для использования в другом приложении electron для отправки сообщения обратно в angular через объект event.
export default class EventStore
{
MyProcessEvent:any = null;
}
export default class MyElectonCom
{
constructor()
{
this.registerIpcMain();
}
registerIpcMain()
{
//register to getEvent object for send scraping process status message.
const {ipcMain} = require('electron');
ipcMain.on('my_process_msg', (event) => {
console.log('IPCMain event registered');
//keep event object to resend again and again msg back to angular app.
EventStore.MyProcessEvent = event;
event.reply('my_process_msg', {progress:0, msg:'Registered'});
//After this code and other class/coding can call EventStore.MyProcessEvent.send(....);
});
}
}
- в другом коде electron разработчик может вызвать объект event для отправки данных обратно в приложение angular.
export default class MyElectonProcessCom
{
constructor()
{
}
:
:
convertVideoFileProcessing(completedPercentage)
{
if(!empty(EventStore.MyProcessEvent){
EventStore.MyProcessEvent.send('my_process_msg','Convert video to mp3 ' completedPercentage '%');
}
}
convertVideoFileCompleted()
{
if(!empty(EventStore.MyProcessEvent){
EventStore.MyProcessEvent.send('my_process_msg','Convert video to mp3 completed');
}
}
}