Емітер
Документ "Емітер" відповідає за роботу з ws
запитами. На відміну від http
протоколу, ws
протокол не накладає
строгих обмежень на протокол взаємодії, що надалі створює проблеми, оскільки різні підходи можуть по різному
реалізовувати такий протокол.
X-Fiber
реалізовує власну структуру даних взаємодії, описуючи деталі події, тип події та обробника цієї події.
Архітектура
Робота з подіями має два напрямки - прослуховування подій та генерація подій.
Прослуховування
При необхідності опису слухачів в предметній області необхідно створити документ "Емітер" з переліком необхідних слухачів подій.
Документ "Емітер" повинен бути зареєстрований в документі "Реєстр" предметної області, який в свою чергу, має бути зареєстрований в відповідному сервісі, включеному до бізнес-схеми. Це гарантує, що при запуску ядра обчислень будуть завантажені всі слухачі емітера. При виклику та виконанні конкретного обробника запиту ядро обчислень надасть актуальний знімок структури бізнес-схеми, де вже наявний опис події разом з його обробником.
Генерація
При необхідності генерації подій з передаванням інформації або без, необхідний створити відповідний документ:
- В разі генерації подій як побічний ефект при обробці запитів чи субʼєктів, то необхідно створити документи "Маршрутизатор", "Брокер повідомлень" або доповнити опис документа "Емітер".
- В разі генерації події за розкладом, необхідно створити документ "Планувальник", в якому описати завдання.
Відповідний документ повинен бути зареєстрований в документі "Реєстр" предметної області, який в свою чергу, має бути зареєстрований в відповідному сервісі, включеному до бізнес-схеми. Це гарантує, що при запуску ядра обчислень будуть завантажені всі елементи відповідного документа. При виклику та виконанні конкретного обробника документа ядро обчислень надасть актуальний знімок структури бізнес-схеми, викличе відповідний обробник, в рамках роботи якого буде згенерована подія.
Склад
Емітер поєднує в собі дві функції - опис деталей слухача, та створення обробників подій.
Загальна структура емітера
type EventType = "session:to:session" | "session:to:room" | "broadcast:to:service"
type AuthScope = 'public:route' | 'private:user' | 'private:system'
type Version = "v1" | "v2" | "v3" | "v4" | "v5" | string;
type EventHandler = (
...args // arguments
) => Promise<void>
export type EmitterStructure<E extends string = string> = {
[event in E]: {
[type in EventType]?: {
scope?: AuthScope
version?: Version
handler: EventHandler;
};
};
};
де:
- Типи:
EventType
- перелік типівws
подій.AuthScope
- перелік типів приватизації.Version
- тип версії.EventHandler
- структура обробника події.EmitterStructure
- структура документа "Емітер".
- Структури обʼєкта події:
event
- строкове представлення назви події.type
- типws
події.scope
- тип приватизації події.version
- версія кінцевого маршруту.handler
- обробник події.
X-Fiber
перевіряє назви подій, які не повинні мати слеш або крапку, а при потребі створення назви події використовуйте
slug або на худий кінець - camelCase
. В разі наявності в назві події слешу або крапки ядро обчислень при
завантаженні схеми видасть помилку з вказанням на місце розташування слухача в бізнес-схемі.
Опис події складається з опису типу приватизації та версії маршруту.