|
<< Click to Display Table of Contents >> Navigation: API MasterSCADA 4D > Подключение к исполнительной системе по JSON > HTTP API MasterPLC > События и сообщения > /Methods/PublishEvents |
Возвращает один накопленный пакет уведомлений. Клиент подтверждает обработанный пакет через ackSequenceNumber и повторяет запрос, пока hasMore не станет равным false.
HTTP: POST /Methods/PublishEvents
{
"sessionId": 123456789,
"subscriptionId": 1,
"ackSequenceNumber": 0
}
Поле |
Тип |
Обязательное |
По умолчанию |
Описание |
|---|---|---|---|---|
sessionId |
integer |
условно |
— |
Нужен, если сессия не передана заголовком Session-Id |
subscriptionId |
integer |
да |
— |
Идентификатор подписки |
ackSequenceNumber |
integer |
нет |
0 |
Последний полностью обработанный клиентом номер пакета |
{
"subscriptionId": 1,
"sequenceNumber": 1,
"recs": [
{
"clientHandle": 101,
"recType": "Update",
"fields": [
"12A5EDFFFFFF",
1710000000000,
"Превышение уставки",
100,
false
]
}
],
"deleted": [
{
"clientHandle": 101,
"eventIds": ["7623423AA"]
}
],
"hasMore": false,
"serverTime": 1710000000123,
"code": 0
}
Если пакетов нет, поля sequenceNumber, recs и deleted отсутствуют:
{
"subscriptionId": 1,
"hasMore": false,
"serverTime": 1710000000123,
"code": 0
}
После потери старых пакетов дополнительно возвращается накопленный счётчик:
{
"subscriptionId": 1,
"hasMore": false,
"overflow": 3,
"serverTime": 1710000000123,
"code": 0
}
Поле |
Тип |
Условие |
Описание |
|---|---|---|---|
subscriptionId |
integer |
всегда |
Идентификатор подписки |
sequenceNumber |
integer |
есть пакет |
Номер возвращаемого пакета |
recs |
array |
есть пакет |
Уведомления; массив присутствует и для пакета, содержащего только удаления |
recs[].clientHandle |
integer |
всегда в записи |
Идентификатор выборки на стороне клиента |
recs[].recType |
string |
всегда в записи |
Update, Refresh или UpdateArchive |
recs[].fields |
array |
всегда в записи |
Значения в порядке items[].fields из CreateMonitoredEvents |
deleted |
array |
пакет содержит удаления |
События, которые раньше проходили фильтр, а теперь не проходят |
deleted[].clientHandle |
integer |
всегда в группе |
Выборка, из которой нужно удалить события |
deleted[].eventIds |
array of string |
всегда в группе |
Идентификаторы удаляемых событий |
hasMore |
boolean |
всегда |
true, если после возвращённого пакета в очереди есть следующий |
overflow |
integer |
были потеряны пакеты |
Накопленное число пакетов, удалённых из-за maxEventsQueue |
serverTime |
integer |
всегда |
Время сервера, Unix time в миллисекундах |
code |
integer |
всегда |
Общий результат публикации |
Элементы fields могут быть числами, строками, логическими значениями или null: тип определяется фактическим полем события, а не переданными при создании выборки type и typeHash.
•Перед формированием ответа сервер удаляет все пакеты с номером не больше ackSequenceNumber, затем возвращает первый оставшийся пакет.
•Если не подтвердить полученный sequenceNumber, следующий вызов возвращает тот же пакет повторно.
•Один вызов возвращает не более одного пакета. Уже отправленный, но не подтверждённый пакет перестаёт расти; новые события попадают в следующий пакет.
•Пакет ограничивается maxNotificationsPerPublish по числу записей recs. Группы deleted в этот счётчик не входят, а сохранённый maxSize размер ответа не ограничивает.
•overflow не сбрасывается после чтения и продолжает возвращаться во всех следующих ответах, пока существует подписка.