* Add function so that the total number of web-socket clients can be limited easily. This is to cope with a problem when a browser does not close the web-socket connection correctly. I have observed this on Chromium based browsers. The memory leak will eventually lead to the server crashing. Normally only one connection per client is required, so limiting the number of connections would not normally cause any problems.
* Prevent an assertion failure when using WebSockets
Frequently when using Web Sockets you will get the assert failure:
assertion "new_rcv_ann_wnd <= 0xffff" failed: file "/Users/ficeto/Desktop/ESP32/ESP32/esp-idf-public/components/lwip/lwip/src/core/tcp.c", line 779, function: tcp_update_rcv_ann_wnd
This will happen particulary when you close the browser window. This change
prevents the issue from occuring.
* Do not use thread locking with the ESP8266, but instead use an empty placeholder class that can be used to implement locking at a later date.
* Do not use thread locking with the ESP8266, but instead use an empty placeholder class that can be used to implement locking at a later date.
* Add function so that the total number of web-socket clients can be limited easily. This is to cope with a problem when a browser does not close the web-socket connection correctly. I have observed this on Chromium based browsers. The memory leak will eventually lead to the server crashing. Normally only one connection per client is required, so limiting the number of connections would not normally cause any problems.
* Set the default number of ws clients dependent on processor.
* Add thread locking to improve stability.
* Do not use thread locking with the ESP8266, but instead use an empty placeholder class that can be used to implement locking at a later date.
* Add support for a MultiMessage where the buffer is shared between WS messages to multiple clients.
Add ability to create a WS buffer directly and write to it, saving duplication of message in RAM, then send it. example below is an arduinoJson message.
```cpp
void sendDataWs(AsyncWebSocketClient * client)
{
DynamicJsonBuffer jsonBuffer;
JsonObject& root = jsonBuffer.createObject();
root["a"] = "abc";
root["b"] = "abcd";
root["c"] = "abcde";
root["d"] = "abcdef";
root["e"] = "abcdefg";
size_t len = root.measureLength();
AsyncWebSocketMessageBuffer * buffer = ws.makeBuffer(len); // creates a buffer (len + 1) for you.
if (buffer) {
root.printTo((char *)buffer->get(), len + 1);
if (client) {
client->text(buffer);
} else {
ws.textAll(buffer);
}
}
}
```
* Add example to readme.
* using Container instead ofdirect pointers list manipulation
* fixed different type of virtual methods.
* Fixed typo in conditional
* Renamed ListArray to LinkedList
* Const reference to String as method parameters to prevent additional copy and memory allocation when String passed by value
* fix 'min' redefinition
* removed #include <iterator>
begin/end methods it's enough for 'for( : )' loop
count() renamed to length()
spacing fixing
* Const reference to String as method parameters to prevent additional copy and memory allocation when String passed by value
* Fixed unused params warnings
* Prevent buffer overflow on received data
* pass to 7 char to avoid save to flash by SDK
* return _contentLength, avoid array reparse to know len
* Added FlashStringHelper for text and binary
* Added FlashStringHelper also to AsyncWebSocketClient
* Added PROGMEM doc
* Corrected binary was sending PSTR as text, addded len
* Server calls client method and code as asked @me-no-dev
* server calls client method and code as asked by @me-no-dev
* Changed Code presentation
* Added printf_P methods
* Prevent buffer overflow on received data
* pass to 7 char to avoid save to flash by SDK
* return _contentLength, avoid array reparse to know len
* Added FlashStringHelper for text and binary
* Added FlashStringHelper also to AsyncWebSocketClient
* Added PROGMEM doc
* Corrected binary was sending PSTR as text, addded len
* Server calls client method and code as asked @me-no-dev
* server calls client method and code as asked by @me-no-dev
* Changed Code presentation