diff --git a/src/AsyncEventSource.cpp b/src/AsyncEventSource.cpp index 0707d4a..c56076d 100644 --- a/src/AsyncEventSource.cpp +++ b/src/AsyncEventSource.cpp @@ -288,9 +288,26 @@ void AsyncEventSource::close(){ } } -void AsyncEventSource::send(const char *message, const char *event, uint32_t id, uint32_t reconnect){ +// pmb fix +size_t AsyncEventSource::avgPacketsWaiting() const { if(_clients.isEmpty()) - return; + return 0; + + size_t aql=0; + uint32_t nConnectedClients=0; + + for(const auto &c: _clients){ + if(c->connected()) { + aql+=c->packetsWaiting(); + ++nConnectedClients; + } + } +// return aql / nConnectedClients; + return ((aql) + (nConnectedClients/2))/(nConnectedClients); // round up +} + +void AsyncEventSource::send(const char *message, const char *event, uint32_t id, uint32_t reconnect){ + String ev = generateEventMessage(message, event, id, reconnect); for(const auto &c: _clients){ diff --git a/src/AsyncEventSource.h b/src/AsyncEventSource.h index 1b4d604..7c212e9 100644 --- a/src/AsyncEventSource.h +++ b/src/AsyncEventSource.h @@ -69,6 +69,7 @@ class AsyncEventSourceClient { void send(const char *message, const char *event=NULL, uint32_t id=0, uint32_t reconnect=0); bool connected() const { return (_client != NULL) && _client->connected(); } uint32_t lastId() const { return _lastId; } + size_t packetsWaiting() const { return _messageQueue.length(); } //system callbacks (do not call) void _onAck(size_t len, uint32_t time); @@ -91,6 +92,7 @@ class AsyncEventSource: public AsyncWebHandler { void onConnect(ArEventHandlerFunction cb); void send(const char *message, const char *event=NULL, uint32_t id=0, uint32_t reconnect=0); size_t count() const; //number clinets connected + size_t avgPacketsWaiting() const; //system callbacks (do not call) void _addClient(AsyncEventSourceClient * client);