Events
Подписка на события движка, панель хода выполнения сценария и журнал логов.
Интерфейс постоянно получает сигналы: интерфейс загрузился, установлена связь с движком, пользователь запустил сценарий, появилась новая запись в журнале, обновилась статистика. Этот раздел объясняет, как на такие сигналы подписываться и как показывать ход выполнения сценария.
Три уровня событий
| Уровень | Как подписаться | Примеры |
|---|---|---|
| Жизненный цикл интерфейса | document.addEventListener | interface:ready, engine:connected |
| Рабочий процесс | Engine.api.ui.on(...) | workflow:start, workflow:stop |
| Движок (реальное время) | Engine.api.eventListener.on(...) | новые записи в журнале, обновления статистики и состояния |
События рабочего процесса описаны в разделе Runtime. Здесь — про остальные два уровня.
События жизненного цикла (DOM)
Эти события возникают на объекте document и отражают готовность интерфейса и связь с движком.
| Событие | Когда возникает |
|---|---|
interface:ready | Интерфейс полностью инициализирован — API готово |
engine:connected | Установлена связь с движком |
engine:disconnected | Связь с движком потеряна |
ui:event | Пришло событие движка (обёртка над уровнем движка) |
document.addEventListener('interface:ready', () => {
console.log('Интерфейс готов');
});
document.addEventListener('engine:connected', () => {
console.log('Движок на связи');
});
document.addEventListener('engine:disconnected', () => {
Engine.api.dialog.alert('Связь с движком потеряна', { type: 'warning' });
});События движка
Engine.api.eventListener — подписка на то, что происходит внутри движка во время выполнения: новые записи в журнале, обновления статистики, изменения состояния. Это основной способ обновлять интерфейс в реальном времени.
Подписаться на событие движка
Engine.api.eventListener.on(событие, обработчик) — подписывается на событие. В обработчик приходит информация о произошедшем.
// Новая запись в журнале
Engine.api.eventListener.on('log_added', (info) => {
console.log('Лог:', info);
});
// Обновилась статистика выполнения
Engine.api.eventListener.on('statistics_updated', (info) => {
updateCounters(info);
});
// Изменилось состояние
Engine.api.eventListener.on('state_changed', (info) => {
refreshView(info);
});Отписаться от события движка
Engine.api.eventListener.off(событие, обработчик) — отписывается от события.
Подписаться на одно срабатывание
Engine.api.eventListener.once(событие, обработчик) — подписывается один раз: обработчик сработает при первом наступлении события и автоматически отпишется.
Проверить состояние слушателя
Engine.api.eventListener.getStatus() — возвращает состояние подписки на события движка: инициализирована ли и активна ли связь.
const res = Engine.api.eventListener.getStatus();
console.log('Слушатель активен:', res.data.connected);Подписка на все события
Специальное имя '*' получает любые события — удобно для отладки. Первым аргументом в обработчик приходит имя события.
Engine.api.eventListener.on('*', (eventName, info) => {
console.log('Событие движка:', eventName);
});ℹ️ Если вам нужна готовая визуализация хода выполнения, не собирайте её вручную из событий — используйте панель хода выполнения: она уже подписана на нужные события и рисует прогресс, статистику и журнал.
Панель хода выполнения
Engine.api.scenarioView — встроенная панель, показывающая, как идёт выполнение сценария или задачи: статистику (успешно, ошибки, предупреждения), прогресс потоков и журнал выполнения.
Показ и скрытие
show()— показать панель.hide()— скрыть панель.
Привязка к выполнению
start(имя, идентификатор?)— начать отображение нового запуска.attach(идентификаторЗадачи, параметры?)— привязать панель к уже запущенной задаче и отслеживать её.detach()— отвязать панель от текущего выполнения.
const res = await Engine.api.engine.startTask('ProcessQueue', { max_threads: 3 });
Engine.api.scenarioView.show();
Engine.api.scenarioView.attach(res.data.task_id);Управление отображаемым выполнением
stop()— остановить.pause()/resume()— приостановить и возобновить.
Журнал и статистика панели
addLog(тип, сообщение, время?)— добавить запись в журнал панели.clearLog()— очистить журнал.updateStats(изменения)— обновить счётчики статистики.
Engine.api.scenarioView.addLog('info', 'Обработка началась');
Engine.api.scenarioView.updateStats({ success: 10, failed: 1 });Состояние панели
getState()— возвращает состояние панели: видима ли, идёт ли выполнение, на паузе ли, текущая статистика.closeAllPopups()— закрыть все всплывающие окна панели.
const res = Engine.api.scenarioView.getState();
console.log(res.data.running, res.data.stats);Журнал логов
Engine.api.log — доступ к журналу записей интерфейса.
Добавить запись в журнал
Engine.api.log.addEntry(тип, сообщение, время?) — добавляет запись в журнал. тип — категория записи (например, 'info', 'success', 'warning', 'error').
Engine.api.log.addEntry('success', 'Файл сохранён');Получить все записи журнала
Engine.api.log.getEntries() — возвращает все записи журнала.
Узнать число записей
Engine.api.log.getCount() — возвращает количество записей.
Очистить журнал
Engine.api.log.clear() — очищает журнал.
const res = Engine.api.log.getCount();
if (res.data > 1000) Engine.api.log.clear();Пример: собственная реакция на ход выполнения
document.addEventListener('engine:connected', () => {
// Обновляем свой счётчик при каждой новой записи в журнале
Engine.api.eventListener.on('log_added', () => {
const count = Engine.api.log.getCount().data;
document.getElementById('logCount').textContent = count;
});
// Реагируем на обновление статистики
Engine.api.eventListener.on('statistics_updated', (info) => {
console.log('Статистика обновлена', info);
});
});Electron
Настольные возможности: работа с файлами, системные диалоги, буфер обмена, пути и оболочка ОС.
Частые проблемы
Сбитое системное время и защита Windows — две самые частые причины, по которым Multogram не подключается к Telegram или вовсе не устанавливается. Как проверить и исправить и то, и другое.