@@ -28,10 +28,12 @@ enum class Poll : uint8_t {
2828class Core : public Http {
2929 protected:
3030#ifdef __AVR__
31+ typedef void (*CallbackError)(Text text);
3132 typedef void (*CallbackRaw)(Text response);
3233 typedef void (*CallbackResult)(gson::Entry& entry);
3334 typedef void (*CallbackUpdate)(Update& upd);
3435#else
36+ typedef std::function<void (Text text)> CallbackError;
3537 typedef std::function<void (Text response)> CallbackRaw;
3638 typedef std::function<void (gson::Entry& entry)> CallbackResult;
3739 typedef std::function<void (Update& upd)> CallbackUpdate;
@@ -188,6 +190,17 @@ class Core : public Http {
188190 void detachRaw () {
189191 _cbRaw = nullptr ;
190192 }
193+
194+ // подключить обработчик ошибки сервера void cb(Text error) {}
195+ void attachError (CallbackError callback) {
196+ _cbErr = callback;
197+ }
198+
199+ // отключить обработчик ошибки
200+ void detachError () {
201+ _cbErr = nullptr ;
202+ }
203+
191204 // ============================== TICK ==============================
192205 // тикер, вызывать в loop. Вернёт true, если был обработан Update
193206 bool tick () {
@@ -399,6 +412,7 @@ class Core : public Http {
399412 CallbackUpdate _cbUpdate = nullptr ;
400413 CallbackResult _cbResult = nullptr ;
401414 CallbackRaw _cbRaw = nullptr ;
415+ CallbackError _cbErr = nullptr ;
402416
403417#ifndef FB_NO_FILE
404418 ota_t _ota = ota_t ::None;
@@ -422,8 +436,11 @@ class Core : public Http {
422436 thisBot = nullptr ;
423437 }
424438 if (res.isObject ()) _parseResult (res);
439+ } else {
440+ if (_cbErr && res._parser [tg_apih::ok]) _cbErr (res._parser [tg_apih::description]);
425441 }
426442 return res;
443+
427444 } else if (resp.type () == F (" application/octet-stream" )) {
428445 FB_LOG (" got file" );
429446 return Result (resp.body ());
0 commit comments