From 736a54af1ab68e4c9be7bfe9b44586de3a41ecd0 Mon Sep 17 00:00:00 2001 From: Luc Date: Sat, 22 Jun 2019 18:51:01 +0200 Subject: [PATCH] Allows to check queue status (#411) --- src/AsyncWebSocket.cpp | 19 +++++++++++++++++++ src/AsyncWebSocket.h | 3 +++ 2 files changed, 22 insertions(+) diff --git a/src/AsyncWebSocket.cpp b/src/AsyncWebSocket.cpp index 03ab68f..9bd037a 100644 --- a/src/AsyncWebSocket.cpp +++ b/src/AsyncWebSocket.cpp @@ -544,6 +544,11 @@ void AsyncWebSocketClient::_runQueue(){ } } +bool AsyncWebSocketClient::queueIsFull(){ + if((_messageQueue.length() >= WS_MAX_QUEUED_MESSAGES) || (_status != WS_CONNECTED) ) return true; + return false; +} + void AsyncWebSocketClient::_queueMessage(AsyncWebSocketMessage *dataMessage){ if(dataMessage == NULL) return; @@ -876,6 +881,20 @@ void AsyncWebSocket::_handleDisconnect(AsyncWebSocketClient * client){ }); } +bool AsyncWebSocket::availableForWriteAll(){ + for(const auto& c: _clients){ + if(c->queueIsFull()) return false; + } + return true; +} + +bool AsyncWebSocket::availableForWrite(uint32_t id){ + for(const auto& c: _clients){ + if(c->queueIsFull() && (c->id() == id )) return false; + } + return true; +} + size_t AsyncWebSocket::count() const { return _clients.count_if([](AsyncWebSocketClient * c){ return c->status() == WS_CONNECTED; diff --git a/src/AsyncWebSocket.h b/src/AsyncWebSocket.h index 0a12acb..1dd0e50 100644 --- a/src/AsyncWebSocket.h +++ b/src/AsyncWebSocket.h @@ -189,6 +189,7 @@ class AsyncWebSocketClient { //data packets void message(AsyncWebSocketMessage *message){ _queueMessage(message); } + bool queueIsFull(); size_t printf(const char *format, ...) __attribute__ ((format (printf, 2, 3))); #ifndef ESP32 @@ -237,6 +238,8 @@ class AsyncWebSocket: public AsyncWebHandler { const char * url() const { return _url.c_str(); } void enable(bool e){ _enabled = e; } bool enabled() const { return _enabled; } + bool availableForWriteAll(); + bool availableForWrite(uint32_t id); size_t count() const; AsyncWebSocketClient * client(uint32_t id);