Модуль генератора событий
Данный модуль используется в демонстрационных примерах для моделирования работы графического полотна с сигналами, изменяющимися в реальном времени. Он имитирует поток событий, как если бы данные поступали из внешнего источника в режиме реального времени.
Исходный код модуля
Установка
Модуль подключается как git submodule. Рекомендуется размещать его в директории src/submodules.
$ git submodule add git@github.com:IncartDev/signal-generator-js.git
Файл конфигурации
Работа генератора настраивается с помощью конфигурационного файла формата .json.
{
"interval": 1000,
"marks": []
}
| Название | Тип | Значение поумолчанию | Описание |
|---|---|---|---|
interval |
int | ОБЯЗАТЕЛЬНОЕ | Интервал генерации событий в миллисекундах. |
marks |
Array<object> | ОБЯЗАТЕЛЬНОЕ | Список описаний генерируемых меток. |
Свойство marks
marks описывается объектом следующего вида:
{
"marks": [
{
"name": "RR",
"freq": 1,
"type": "int",
"min_value": 1000,
"max_value": 1001,
}
]
}
| Название | Тип | Значение поумолчанию | Описание |
|---|---|---|---|
name |
string | ОБЯЗАТЕЛЬНОЕ | Уникальное имя события. Используется для привязки к компонентам визуализации. |
freq |
int | ОБЯЗАТЕЛЬНОЕ | Количество событий, генерируемых за каждый интервал. |
type |
string | ОБЯЗАТЕЛЬНОЕ | Тип создаваемой метки: number — метки с числовым значением, empty — метки без дополнительных данных. |
min_value |
int | ОБЯЗАТЕЛЕН (для type = number) |
Минимальное значение генерируемых числовых меток. |
max_value |
int | ОБЯЗАТЕЛЕН (для type = number) |
Максимальное значение генерируемых числовых меток. |
Пример полной конфигурации
Подключение генератора сигналов
Подключение модуля рекомендуется выполнять в инициализационном скрипте графического полотна.
import {
ContinuousRawSignalGenerator,
EventGenerator,
ContinuousGeneratorSettingsParser,
EventGeneratorSettingsParser
} from "@incartdev/signal-generator-js";
import {
JagmRawVisScreenDataParser,
RawDataEventMessageParser,
RawDataEventMessage
} from "@incartdev/jagm-chart";
import signalGeneratorSettings from "./SignalGeneratorSettings.json";
import eventGeneratorSettings from "./EventGeneratorSettings.json";
// Функция отрисовки событий на графике
async function pushEventMessage(message: RawDataEventMessage): Promise<void> {
if (chartProvider === undefined) {
return;
}
// Для каждого графического полотна
for (let chartIndex = 0; chartIndex < chartProvider.charts.length; ++chartIndex) {
// Поиск контент группы меток для выбранного полотна
const chart = chartProvider.charts[chartIndex];
const marksGroup = chart.findContentGroup("marks");
if (marksGroup === undefined || !(marksGroup instanceof JagmOnlineMarksChartContentGroup)) {
continue;
}
// Добавление метки
await marksGroup.addMark(message);
}
}
async function install(): Promise<void> {
// Создание экземпляра класса генератора сигналов
const generator = new ContinuousRawSignalGenerator();
// Преобразование настроек
const signalGenSettings = ContinuousGeneratorSettingsParser.parse(signalGeneratorSettings);
if (signalGenSettings === undefined) {
return;
}
// Инициализациия генератора сигналов
generator.init(signalGenSettings);
// Создание экземпляра класса генератора событий
const eventGenerator = new EventGenerator();
// Преобразование настроек
const eventGenSettings = EventGeneratorSettingsParser.parse(eventGeneratorSettings);
if (eventGenSettings === undefined) {
return;
}
// Инициализациия генератора событий
eventGenerator.init(eventGenSettings);
// Подписка на поступление данных сигналов
generator.addListener(async message => {
if (generator === undefined || eventGenerator === undefined || chartProvider === undefined) {
return;
}
// Преобразование сгенерированных данных
const typedMessage = JagmRawVisScreenDataParser.parse(message);
if (typedMessage === undefined) {
return;
}
// Получение координаты последнего сгенерироавнного блока данных
const pointIndex = generator.getChannelPointCounter(0, 0);
// Установка координаты события
eventGenerator.setPointIndex(pointIndex);
// Отрисовка данных сигнаов на графике
await chartProvider.pushVisMessage(typedMessage);
});
eventGenerator.onFrameIsReady = message => {
// Преобразование сгенерированных данных
const typedMessage = RawDataEventMessageParser.parse(message);
if (typedMessage === undefined) {
return;
}
// Отрисовка событий на графике
pushEventMessage(typedMessage);
};
// Запуск генератора сигнала
generator.start();
eventGenerator.start();
}
Пример использования генератора событий
API
| Свойство | Тип | Описание |
|---|---|---|
onFrameIsReady(handler: func) |
Функция | Обработчик, вызываемый при готовности нового блока данных. |
setPointIndex(index: int) |
Функция | Устанавливает координату, с которой связываются события. |
start() |
Функция | Запуск генерации сигналов. |
stop() |
Функция | Завершение генерации сигналов. |
Доступ к содержимому по ссылке возможен только для авторизованных пользователей GitHub, являющихся участниками организации IncartDev
Ссылка на ресурс
Доступ к содержимому по ссылке возможен только для авторизованных пользователей GitHub, являющихся участниками организации IncartDev
Ссылка на ресурс