forked from me-no-dev/ESPAsyncWebServer
Made the extensive logging optional to improve performance
This commit is contained in:
@ -25,6 +25,10 @@
|
|||||||
|
|
||||||
#include <libb64/cencode.h>
|
#include <libb64/cencode.h>
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
constexpr const bool asyncWebSocketDebug = false;
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef ESP8266
|
#ifndef ESP8266
|
||||||
extern "C" {
|
extern "C" {
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -258,7 +262,7 @@ AsyncWebSocketClient::AsyncWebSocketClient(AsyncWebServerRequest *request, Async
|
|||||||
: _lock{"AsyncWebSocketClient"}
|
: _lock{"AsyncWebSocketClient"}
|
||||||
, _tempObject(NULL)
|
, _tempObject(NULL)
|
||||||
{
|
{
|
||||||
Serial.printf("AsyncWebSocketClient::AsyncWebSocketClient this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
|
if (asyncWebSocketDebug) Serial.printf("AsyncWebSocketClient::AsyncWebSocketClient this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
|
||||||
|
|
||||||
_client = request->client();
|
_client = request->client();
|
||||||
_server = server;
|
_server = server;
|
||||||
@ -281,7 +285,8 @@ AsyncWebSocketClient::AsyncWebSocketClient(AsyncWebServerRequest *request, Async
|
|||||||
|
|
||||||
AsyncWebSocketClient::~AsyncWebSocketClient()
|
AsyncWebSocketClient::~AsyncWebSocketClient()
|
||||||
{
|
{
|
||||||
Serial.printf("AsyncWebSocketClient::~AsyncWebSocketClient this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
|
if (asyncWebSocketDebug) Serial.printf("AsyncWebSocketClient::~AsyncWebSocketClient this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
|
||||||
|
|
||||||
{
|
{
|
||||||
AsyncWebLockGuard l(_lock, "AsyncWebSocketClient::~AsyncWebSocketClient()");
|
AsyncWebLockGuard l(_lock, "AsyncWebSocketClient::~AsyncWebSocketClient()");
|
||||||
_messageQueue = {};
|
_messageQueue = {};
|
||||||
@ -292,31 +297,29 @@ AsyncWebSocketClient::~AsyncWebSocketClient()
|
|||||||
|
|
||||||
void AsyncWebSocketClient::_onAck(size_t len, uint32_t time)
|
void AsyncWebSocketClient::_onAck(size_t len, uint32_t time)
|
||||||
{
|
{
|
||||||
Serial.printf("AsyncWebSocketClient::_onAck this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
|
if (asyncWebSocketDebug) Serial.printf("AsyncWebSocketClient::_onAck this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
|
||||||
|
|
||||||
_lastMessageTime = millis();
|
_lastMessageTime = millis();
|
||||||
|
|
||||||
{
|
AsyncWebLockGuard l(_lock, "AsyncWebSocketClient::_onAck()");
|
||||||
AsyncWebLockGuard l(_lock, "AsyncWebSocketClient::_onAck()");
|
|
||||||
|
|
||||||
if (!_controlQueue.empty()) {
|
if (!_controlQueue.empty()) {
|
||||||
auto &head = _controlQueue.front();
|
auto &head = _controlQueue.front();
|
||||||
if (head.finished()){
|
if (head.finished()){
|
||||||
len -= head.len();
|
len -= head.len();
|
||||||
if (_status == WS_DISCONNECTING && head.opcode() == WS_DISCONNECT){
|
if (_status == WS_DISCONNECTING && head.opcode() == WS_DISCONNECT){
|
||||||
_controlQueue.pop();
|
|
||||||
_status = WS_DISCONNECTED;
|
|
||||||
l.unlock();
|
|
||||||
_client->close(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_controlQueue.pop();
|
_controlQueue.pop();
|
||||||
|
_status = WS_DISCONNECTED;
|
||||||
|
l.unlock();
|
||||||
|
_client->close(true);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
_controlQueue.pop();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(len && !_messageQueue.empty()){
|
if(len && !_messageQueue.empty()){
|
||||||
_messageQueue.front().ack(len, time);
|
_messageQueue.front().ack(len, time);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_runQueue();
|
_runQueue();
|
||||||
@ -324,7 +327,7 @@ void AsyncWebSocketClient::_onAck(size_t len, uint32_t time)
|
|||||||
|
|
||||||
void AsyncWebSocketClient::_onPoll()
|
void AsyncWebSocketClient::_onPoll()
|
||||||
{
|
{
|
||||||
Serial.printf("AsyncWebSocketClient::_onPoll this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
|
if (asyncWebSocketDebug) Serial.printf("AsyncWebSocketClient::_onPoll this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
|
||||||
|
|
||||||
AsyncWebLockGuard l(_lock, "AsyncWebSocketClient::_onPoll");
|
AsyncWebLockGuard l(_lock, "AsyncWebSocketClient::_onPoll");
|
||||||
if(_client->canSend() && (!_controlQueue.empty() || !_messageQueue.empty()))
|
if(_client->canSend() && (!_controlQueue.empty() || !_messageQueue.empty()))
|
||||||
@ -341,7 +344,7 @@ void AsyncWebSocketClient::_onPoll()
|
|||||||
|
|
||||||
void AsyncWebSocketClient::_runQueue()
|
void AsyncWebSocketClient::_runQueue()
|
||||||
{
|
{
|
||||||
Serial.printf("AsyncWebSocketClient::_runQueue this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
|
if (asyncWebSocketDebug) Serial.printf("AsyncWebSocketClient::_runQueue this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
|
||||||
|
|
||||||
AsyncWebLockGuard l(_lock, "AsyncWebSocketClient::_runQueue()");
|
AsyncWebLockGuard l(_lock, "AsyncWebSocketClient::_runQueue()");
|
||||||
|
|
||||||
@ -362,7 +365,7 @@ void AsyncWebSocketClient::_runQueue()
|
|||||||
|
|
||||||
bool AsyncWebSocketClient::queueIsFull() const
|
bool AsyncWebSocketClient::queueIsFull() const
|
||||||
{
|
{
|
||||||
Serial.printf("AsyncWebSocketClient::queueIsFull this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
|
if (asyncWebSocketDebug) Serial.printf("AsyncWebSocketClient::queueIsFull this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
|
||||||
|
|
||||||
size_t size;
|
size_t size;
|
||||||
{
|
{
|
||||||
@ -374,7 +377,7 @@ bool AsyncWebSocketClient::queueIsFull() const
|
|||||||
|
|
||||||
bool AsyncWebSocketClient::canSend() const
|
bool AsyncWebSocketClient::canSend() const
|
||||||
{
|
{
|
||||||
Serial.printf("AsyncWebSocketClient::canSend this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
|
if (asyncWebSocketDebug) Serial.printf("AsyncWebSocketClient::canSend this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
|
||||||
|
|
||||||
size_t size;
|
size_t size;
|
||||||
{
|
{
|
||||||
@ -386,7 +389,7 @@ bool AsyncWebSocketClient::canSend() const
|
|||||||
|
|
||||||
void AsyncWebSocketClient::_queueControl(uint8_t opcode, const uint8_t *data, size_t len, bool mask)
|
void AsyncWebSocketClient::_queueControl(uint8_t opcode, const uint8_t *data, size_t len, bool mask)
|
||||||
{
|
{
|
||||||
Serial.printf("AsyncWebSocketClient::_queueControl this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
|
if (asyncWebSocketDebug) Serial.printf("AsyncWebSocketClient::_queueControl this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
|
||||||
|
|
||||||
{
|
{
|
||||||
AsyncWebLockGuard l(_lock, "AsyncWebSocketClient::_queueControl");
|
AsyncWebLockGuard l(_lock, "AsyncWebSocketClient::_queueControl");
|
||||||
@ -399,7 +402,7 @@ void AsyncWebSocketClient::_queueControl(uint8_t opcode, const uint8_t *data, si
|
|||||||
|
|
||||||
void AsyncWebSocketClient::_queueMessage(std::shared_ptr<std::vector<uint8_t>> buffer, uint8_t opcode, bool mask)
|
void AsyncWebSocketClient::_queueMessage(std::shared_ptr<std::vector<uint8_t>> buffer, uint8_t opcode, bool mask)
|
||||||
{
|
{
|
||||||
Serial.printf("AsyncWebSocketClient::_queueMessage this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
|
if (asyncWebSocketDebug) Serial.printf("AsyncWebSocketClient::_queueMessage this=0x%llx task=0x%llx %s\r\n", uint64_t(this), uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
|
||||||
|
|
||||||
if(_status != WS_CONNECTED)
|
if(_status != WS_CONNECTED)
|
||||||
return;
|
return;
|
||||||
@ -421,29 +424,34 @@ void AsyncWebSocketClient::_queueMessage(std::shared_ptr<std::vector<uint8_t>> b
|
|||||||
_runQueue();
|
_runQueue();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AsyncWebSocketClient::close(uint16_t code, const char * message){
|
void AsyncWebSocketClient::close(uint16_t code, const char * message)
|
||||||
if(_status != WS_CONNECTED)
|
{
|
||||||
return;
|
if(_status != WS_CONNECTED)
|
||||||
if(code){
|
return;
|
||||||
uint8_t packetLen = 2;
|
|
||||||
if(message != NULL){
|
if(code)
|
||||||
size_t mlen = strlen(message);
|
{
|
||||||
if(mlen > 123) mlen = 123;
|
uint8_t packetLen = 2;
|
||||||
packetLen += mlen;
|
if (message != NULL)
|
||||||
|
{
|
||||||
|
size_t mlen = strlen(message);
|
||||||
|
if(mlen > 123) mlen = 123;
|
||||||
|
packetLen += mlen;
|
||||||
|
}
|
||||||
|
char * buf = (char*)malloc(packetLen);
|
||||||
|
if (buf != NULL)
|
||||||
|
{
|
||||||
|
buf[0] = (uint8_t)(code >> 8);
|
||||||
|
buf[1] = (uint8_t)(code & 0xFF);
|
||||||
|
if (message != NULL){
|
||||||
|
memcpy(buf+2, message, packetLen -2);
|
||||||
|
}
|
||||||
|
_queueControl(WS_DISCONNECT, (uint8_t*)buf, packetLen);
|
||||||
|
free(buf);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
char * buf = (char*)malloc(packetLen);
|
_queueControl(WS_DISCONNECT);
|
||||||
if(buf != NULL){
|
|
||||||
buf[0] = (uint8_t)(code >> 8);
|
|
||||||
buf[1] = (uint8_t)(code & 0xFF);
|
|
||||||
if(message != NULL){
|
|
||||||
memcpy(buf+2, message, packetLen -2);
|
|
||||||
}
|
|
||||||
_queueControl(WS_DISCONNECT, (uint8_t*)buf, packetLen);
|
|
||||||
free(buf);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_queueControl(WS_DISCONNECT);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AsyncWebSocketClient::ping(const uint8_t *data, size_t len)
|
void AsyncWebSocketClient::ping(const uint8_t *data, size_t len)
|
||||||
|
@ -5,6 +5,10 @@
|
|||||||
|
|
||||||
#include <ESPAsyncWebServer.h>
|
#include <ESPAsyncWebServer.h>
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
constexpr const bool asyncWebLockDebug = false;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef ESP32
|
#ifdef ESP32
|
||||||
|
|
||||||
// This is the ESP32 version of the Sync Lock, using the FreeRTOS Semaphore
|
// This is the ESP32 version of the Sync Lock, using the FreeRTOS Semaphore
|
||||||
@ -34,12 +38,12 @@ public:
|
|||||||
if (_lockedBy != currentTask) {
|
if (_lockedBy != currentTask) {
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
Serial.printf("AsyncWebLock::lock this=0x%llx name=%s locker=%s task=0x%llx %s\r\n", uint64_t(this), lockName, lockerName, uint64_t(currentTask), pcTaskGetTaskName(currentTask));
|
if (asyncWebLockDebug) Serial.printf("AsyncWebLock::lock this=0x%llx name=%s locker=%s task=0x%llx %s\r\n", uint64_t(this), lockName, lockerName, uint64_t(currentTask), pcTaskGetTaskName(currentTask));
|
||||||
|
|
||||||
if (xSemaphoreTake(_lock, 200 / portTICK_PERIOD_MS))
|
if (xSemaphoreTake(_lock, 200 / portTICK_PERIOD_MS))
|
||||||
break;
|
break;
|
||||||
else
|
else
|
||||||
Serial.printf("AsyncWebLock::lock FAILED this=0x%llx name=%s locker=%s task=0x%llx %s lastLockedBy=%s\r\n", uint64_t(this), lockName, lockerName, uint64_t(currentTask), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()), _lastLockerName);
|
Serial.printf("AsyncWebLock::lock FAILED(200ms) this=0x%llx name=%s locker=%s task=0x%llx %s lastLockedBy=%s\r\n", uint64_t(this), lockName, lockerName, uint64_t(currentTask), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()), _lastLockerName);
|
||||||
}
|
}
|
||||||
_lockedBy = currentTask;
|
_lockedBy = currentTask;
|
||||||
_lastLockerName = lockerName;
|
_lastLockerName = lockerName;
|
||||||
@ -49,7 +53,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void unlock(const char *lockerName) const {
|
void unlock(const char *lockerName) const {
|
||||||
Serial.printf("AsyncWebLock::unlock this=0x%llx name=%s locker=%s task=0x%llx %s\r\n", uint64_t(this), lockName, lockerName, uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
|
if (asyncWebLockDebug) Serial.printf("AsyncWebLock::unlock this=0x%llx name=%s locker=%s task=0x%llx %s\r\n", uint64_t(this), lockName, lockerName, uint64_t(xTaskGetCurrentTaskHandle()), pcTaskGetTaskName(xTaskGetCurrentTaskHandle()));
|
||||||
_lockedBy = NULL;
|
_lockedBy = NULL;
|
||||||
_lastLockerName = NULL;
|
_lastLockerName = NULL;
|
||||||
xSemaphoreGive(_lock);
|
xSemaphoreGive(_lock);
|
||||||
|
Reference in New Issue
Block a user