События
Модули общаются через версионированную шину событий, а не вызывают друг друга напрямую. Ваш модуль объявляет в манифесте, что он публикует и на что подписывается; платформа проверяет эти объявления по каталогу.
Объявление в манифесте
json
"events": {
"publishes": [
{ "name": "cafm.work-order.created", "version": "1.0.0" }
],
"subscribes": [
{ "name": "building.alarm.triggered", "version": "1.0.0" }
]
}Проверка по каталогу
bash
npx tv-sdk check-eventsЭто проверяет, что:
- Каждое событие, на которое вы подписываетесь, существует в каталоге платформы.
- Каждое событие, которое вы публикуете, либо существует, либо сопровождается собственным объявлением схемы (новое событие модуля).
- Версии совместимы.
Зелёный check-events означает, что ваша обвязка событий соответствует контракту платформы. Если он красный, сообщение скажет, какое событие и почему.
Публикация и подписка во время выполнения
ts
import { usePlatformContext } from '@tv/extension-sdk/react';
function useWorkOrderEvents() {
const { events } = usePlatformContext();
// публикация
const announce = (wo: WorkOrder) =>
events.publish('cafm.work-order.created', {
version: '1.0.0',
payload: { id: wo.id, buildingId: wo.buildingId },
});
// подписка
events.subscribe('building.alarm.triggered', (msg) => {
// реакция на тревогу
});
return { announce };
}Версионирование
Имена событий имеют пространство имён (<module>.<entity>.<action>) и несут semver-version. Несовместимое изменение формы полезной нагрузки означает новую мажорную версию этого события — потребители фиксируют ту версию, которую понимают, поэтому вы можете развивать события, не ломая их.
→ Далее: Тестирование