0
Answered

События в методе SendEx

Vyacheslav Okolnikov (Slava) 4 years ago in Bugs and problems updated by Vladimir Ovchinnikov (expert) 3 years ago 2

Не работает событие cbTimeOut. Когда я отсоединяю Ethernet разъём от управляемого устройства, при отправке команды управляемому устройству, событие cbTimeOut должно сработать? Код прикладываю ниже

// @получение данных управления записью рекордера
function Get_recorder_status()
{

device.SendEx({
Type: "GET",
Url: "/api/recorder/status",
/* C помощью поля Headers: {} позволяет задавать стандартные и нестандартные заголовки HTTP-запросов. */
Headers: {
"Accept": "application/json, text/*",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36",
"Content-Type": "application/json; charset=UTF-8 application/json; charset=UTF-8",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7",
"Cookie": "filedownload=true; usr_admin=; pw_admin=; load_site=admin; " + session
},
/* Определяется значением поля KeepAliveOut, передаваемым методу SendEx():
* если KeepAliveOut = 0, то передаётся заголовок "Connection: close";
* если KeepAliveOut > 0, то передаётся заголовок "Connection: Keep-Alive"
*/
KeepAliveOut: 1,

cbReceiveText: function(text, code, headers) {
//IR.Log("cbReceiveText: " + text + " " + code + " " + headers);
parse_Get_recorder_status( text, code, headers );
},
//cbReceiveData: function(data, code, headers) {IR.Log("cbReceiveData "+data+code+headers);},
//cbReceiveCode: function(code) {IR.Log("cbReceiveCode "+code);},
//cbReceiveKey: function(key,value) {IR.Log("cbReceiveKey "+key+value);},
//cbReceiveStartBody: function(stream) {IR.Log("cbReceiveStartBody "+stream);},
//cbReceivePartBody: function(stream) {IR.Log("cbReceivePartBody "+stream);},
//cbReceiveEndBody: function(size) {IR.Log("cbReceiveEndBody "+size);},
cbTimeOut: function() {IR.Log("cbTimeOut_get_recorder_status");}
//cbReceiveStream: function(stream, code, headers) {IR.Log("cbReceiveStream "+stream+code+headers);}
});
}

Настройка драйвера:

Image 42762

Under review

Добрый день.

cbTimeOut сработает после Wait Data (т. е. 5 секунд, судя по скриншоту настроек) и только в том случае, если коннект не был разорван принудительно. Если вы до истечения 5 секунд извлечёте Ethernet кабель из сервера или выключите питание (как вариант убьёте процесс HTTP сервера), то cbTimeOut не получите.

Работа cbTimeOut так задумана изначально, ошибки нет.

cbTimeOut может быть полезен в редких ситуациях. Например, когда сервер жив, соединение установилось и запрос ушёл, но сервер не ответил (по причине неисправности сервиса или загруженности).

В вашем случае используете событие EVENT_ERROR. Это событие срабатывает, если при отправке НТТР запроса ресурс не доступен, или доступен, но не ответил за установленное время.