Skip to content

События

Модули общаются через версионированную шину событий, а не вызывают друг друга напрямую. Ваш модуль объявляет в манифесте, что он публикует и на что подписывается; платформа проверяет эти объявления по каталогу.

Объявление в манифесте

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

Это проверяет, что:

  1. Каждое событие, на которое вы подписываетесь, существует в каталоге платформы.
  2. Каждое событие, которое вы публикуете, либо существует, либо сопровождается собственным объявлением схемы (новое событие модуля).
  3. Версии совместимы.

Зелёный 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. Несовместимое изменение формы полезной нагрузки означает новую мажорную версию этого события — потребители фиксируют ту версию, которую понимают, поэтому вы можете развивать события, не ломая их.

→ Далее: Тестирование

Создано на платформе Tango Vision. Вопросы? developers@tango.vision