diff --git a/src/WebSockets.cpp b/src/WebSockets.cpp index 100ce79..6132d28 100644 --- a/src/WebSockets.cpp +++ b/src/WebSockets.cpp @@ -623,12 +623,7 @@ bool WebSockets::readCb(WSclient_t * client, uint8_t * out, size_t n, WSreadWait } if(!client->tcp->available()) { -#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) - delay(0); -#endif -#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) - yield(); -#endif + WEBSOCKETS_YIELD(); continue; } @@ -641,13 +636,12 @@ bool WebSockets::readCb(WSclient_t * client, uint8_t * out, size_t n, WSreadWait } else { //DEBUG_WEBSOCKETS("Receive %d left %d!\n", len, n); } -#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) - delay(0); -#endif + WEBSOCKETS_YIELD(); } if(cb) { cb(client, true); } + WEBSOCKETS_YIELD(); #endif return true; } @@ -694,10 +688,9 @@ size_t WebSockets::write(WSclient_t * client, uint8_t * out, size_t n) { } else { //DEBUG_WEBSOCKETS("write %d failed left %d!\n", len, n); } -#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) - delay(0); -#endif + WEBSOCKETS_YIELD(); } + WEBSOCKETS_YIELD(); return total; } diff --git a/src/WebSockets.h b/src/WebSockets.h index 1e6f2f9..10434fe 100644 --- a/src/WebSockets.h +++ b/src/WebSockets.h @@ -61,11 +61,18 @@ // moves all Header strings to Flash (~300 Byte) //#define WEBSOCKETS_SAVE_RAM +#if defined(ESP8266) +#define WEBSOCKETS_YIELD() delay(0) +#elif defined(ESP32) +#define WEBSOCKETS_YIELD() yield() +#endif + #elif defined(STM32_DEVICE) #define WEBSOCKETS_MAX_DATA_SIZE (15 * 1024) #define WEBSOCKETS_USE_BIG_MEM #define GET_FREE_HEAP System.freeMemory() +#define WEBSOCKETS_YIELD() #else @@ -73,6 +80,7 @@ #define WEBSOCKETS_MAX_DATA_SIZE (1024) // moves all Header strings to Flash #define WEBSOCKETS_SAVE_RAM +#define WEBSOCKETS_YIELD() #endif diff --git a/src/WebSocketsClient.cpp b/src/WebSocketsClient.cpp index b2c8e6f..179c272 100644 --- a/src/WebSocketsClient.cpp +++ b/src/WebSocketsClient.cpp @@ -148,6 +148,7 @@ void WebSocketsClient::beginSocketIOSSLWithCA(const char * host, uint16_t port, * called in arduino loop */ void WebSocketsClient::loop(void) { + WEBSOCKETS_YIELD(); if(!clientIsConnected(&_client)) { // do not flood the server if((millis() - _lastConnectionFail) < _reconnectInterval) { @@ -190,6 +191,7 @@ void WebSocketsClient::loop(void) { DEBUG_WEBSOCKETS("[WS-Client] creating Network class failed!"); return; } + WEBSOCKETS_YIELD(); #if defined(ESP32) if(_client.tcp->connect(_host.c_str(), _port, WEBSOCKETS_TCP_TIMEOUT)) { #else @@ -203,7 +205,7 @@ void WebSocketsClient::loop(void) { } } else { handleClientData(); - + WEBSOCKETS_YIELD(); if(_client.status == WSC_CONNECTED) { handleHBPing(); handleHBTimeout(&_client); @@ -498,9 +500,7 @@ void WebSocketsClient::handleClientData(void) { break; } } -#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) - delay(0); -#endif + WEBSOCKETS_YIELD(); } #endif diff --git a/src/WebSocketsServer.cpp b/src/WebSocketsServer.cpp index da382b6..16ee1c8 100644 --- a/src/WebSocketsServer.cpp +++ b/src/WebSocketsServer.cpp @@ -135,7 +135,9 @@ void WebSocketsServer::close(void) { */ void WebSocketsServer::loop(void) { if(_runnning) { + WEBSOCKETS_YIELD(); handleNewClients(); + WEBSOCKETS_YIELD(); handleClientData(); } } @@ -231,9 +233,7 @@ bool WebSocketsServer::broadcastTXT(uint8_t * payload, size_t length, bool heade ret = false; } } -#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) - delay(0); -#endif + WEBSOCKETS_YIELD(); } return ret; } @@ -294,9 +294,7 @@ bool WebSocketsServer::broadcastBIN(uint8_t * payload, size_t length, bool heade ret = false; } } -#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) - delay(0); -#endif + WEBSOCKETS_YIELD(); } return ret; } @@ -343,9 +341,7 @@ bool WebSocketsServer::broadcastPing(uint8_t * payload, size_t length) { ret = false; } } -#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) - delay(0); -#endif + WEBSOCKETS_YIELD(); } return ret; } @@ -660,8 +656,8 @@ void WebSocketsServer::handleNewClients(void) { tcpClient->stop(); } -#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) - delay(0); + WEBSOCKETS_YIELD(); +#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) } #endif } @@ -694,9 +690,7 @@ void WebSocketsServer::handleClientData(void) { handleHBPing(client); handleHBTimeout(client); } -#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) - delay(0); -#endif + WEBSOCKETS_YIELD(); } } #endif