forked from me-no-dev/ESPAsyncWebServer
Optimizations
This commit is contained in:
@@ -119,7 +119,7 @@ AsyncEventSourceClient::AsyncEventSourceClient(AsyncWebServerRequest *request, A
|
|||||||
_client->onPoll(NULL, NULL);
|
_client->onPoll(NULL, NULL);
|
||||||
_client->onData(NULL, NULL);
|
_client->onData(NULL, NULL);
|
||||||
_client->onTimeout([](void *r, AsyncClient* c, uint32_t time){ ((AsyncEventSourceClient*)(r))->_onTimeout(time); }, this);
|
_client->onTimeout([](void *r, AsyncClient* c, uint32_t time){ ((AsyncEventSourceClient*)(r))->_onTimeout(time); }, this);
|
||||||
_client->onDisconnect([](void *r, AsyncClient* c){ ((AsyncEventSourceClient*)(r))->_onDisconnect(); }, this);
|
_client->onDisconnect([](void *r, AsyncClient* c){ ((AsyncEventSourceClient*)(r))->_onDisconnect(); delete c; }, this);
|
||||||
_server->_addClient(this);
|
_server->_addClient(this);
|
||||||
delete request;
|
delete request;
|
||||||
}
|
}
|
||||||
@@ -133,10 +133,7 @@ void AsyncEventSourceClient::_onTimeout(uint32_t time){
|
|||||||
}
|
}
|
||||||
|
|
||||||
void AsyncEventSourceClient::_onDisconnect(){
|
void AsyncEventSourceClient::_onDisconnect(){
|
||||||
AsyncClient* cl = _client;
|
|
||||||
_client = NULL;
|
_client = NULL;
|
||||||
cl->free();
|
|
||||||
delete cl;
|
|
||||||
_server->_handleDisconnect(this);
|
_server->_handleDisconnect(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -252,7 +252,7 @@ AsyncWebSocketClient::AsyncWebSocketClient(AsyncWebServerRequest *request, Async
|
|||||||
next = NULL;
|
next = NULL;
|
||||||
_client->onError([](void *r, AsyncClient* c, int8_t error){ ((AsyncWebSocketClient*)(r))->_onError(error); }, this);
|
_client->onError([](void *r, AsyncClient* c, int8_t error){ ((AsyncWebSocketClient*)(r))->_onError(error); }, this);
|
||||||
_client->onAck([](void *r, AsyncClient* c, size_t len, uint32_t time){ ((AsyncWebSocketClient*)(r))->_onAck(len, time); }, this);
|
_client->onAck([](void *r, AsyncClient* c, size_t len, uint32_t time){ ((AsyncWebSocketClient*)(r))->_onAck(len, time); }, this);
|
||||||
_client->onDisconnect([](void *r, AsyncClient* c){ ((AsyncWebSocketClient*)(r))->_onDisconnect(); }, this);
|
_client->onDisconnect([](void *r, AsyncClient* c){ ((AsyncWebSocketClient*)(r))->_onDisconnect(); delete c; }, this);
|
||||||
_client->onTimeout([](void *r, AsyncClient* c, uint32_t time){ ((AsyncWebSocketClient*)(r))->_onTimeout(time); }, this);
|
_client->onTimeout([](void *r, AsyncClient* c, uint32_t time){ ((AsyncWebSocketClient*)(r))->_onTimeout(time); }, this);
|
||||||
_client->onData([](void *r, AsyncClient* c, void *buf, size_t len){ ((AsyncWebSocketClient*)(r))->_onData(buf, len); }, this);
|
_client->onData([](void *r, AsyncClient* c, void *buf, size_t len){ ((AsyncWebSocketClient*)(r))->_onData(buf, len); }, this);
|
||||||
_client->onPoll([](void *r, AsyncClient* c){ ((AsyncWebSocketClient*)(r))->_onPoll(); }, this);
|
_client->onPoll([](void *r, AsyncClient* c){ ((AsyncWebSocketClient*)(r))->_onPoll(); }, this);
|
||||||
@@ -389,10 +389,7 @@ void AsyncWebSocketClient::_onTimeout(uint32_t time){
|
|||||||
}
|
}
|
||||||
|
|
||||||
void AsyncWebSocketClient::_onDisconnect(){
|
void AsyncWebSocketClient::_onDisconnect(){
|
||||||
AsyncClient* cl = _client;
|
|
||||||
_client = NULL;
|
_client = NULL;
|
||||||
cl->free();
|
|
||||||
delete cl;
|
|
||||||
_server->_handleDisconnect(this);
|
_server->_handleDisconnect(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -479,52 +476,54 @@ void AsyncWebSocketClient::_onData(void *buf, size_t plen){
|
|||||||
size_t AsyncWebSocketClient::printf(const char *format, ...) {
|
size_t AsyncWebSocketClient::printf(const char *format, ...) {
|
||||||
va_list arg;
|
va_list arg;
|
||||||
va_start(arg, format);
|
va_start(arg, format);
|
||||||
#ifdef ESP8266
|
char* temp = new char[64];
|
||||||
//ToDo: figure out a way around this
|
if(!temp){
|
||||||
size_t len = 1440;
|
|
||||||
#else
|
|
||||||
size_t len = vsnprintf(NULL, 0, format, arg)+1;
|
|
||||||
#endif
|
|
||||||
char * msg = (char*)malloc(len+1);
|
|
||||||
if(msg == NULL){
|
|
||||||
va_end(arg);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
len = vsnprintf(msg, len, format, arg);
|
char* buffer = temp;
|
||||||
msg[len] = 0;
|
size_t len = vsnprintf(temp, 64, format, arg);
|
||||||
text(msg);
|
|
||||||
va_end(arg);
|
va_end(arg);
|
||||||
free(msg);
|
if (len > 63) {
|
||||||
|
buffer = new char[len + 1];
|
||||||
|
if (!buffer) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
va_start(arg, format);
|
||||||
|
vsnprintf(buffer, len + 1, format, arg);
|
||||||
|
va_end(arg);
|
||||||
|
}
|
||||||
|
text(buffer, len);
|
||||||
|
if (buffer != temp) {
|
||||||
|
delete[] buffer;
|
||||||
|
}
|
||||||
|
delete[] temp;
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t AsyncWebSocketClient::printf_P(PGM_P formatP, ...) {
|
size_t AsyncWebSocketClient::printf_P(PGM_P formatP, ...) {
|
||||||
char* format;
|
|
||||||
va_list arg;
|
va_list arg;
|
||||||
va_start(arg, formatP);
|
va_start(arg, formatP);
|
||||||
#ifdef ESP8266
|
char* temp = new char[64];
|
||||||
//ToDo: figure out a way around this
|
if(!temp){
|
||||||
size_t len = 1440;
|
return 0;
|
||||||
#else
|
}
|
||||||
size_t len = vsnprintf(NULL, 0, format, arg)+1;
|
char* buffer = temp;
|
||||||
#endif
|
size_t len = vsnprintf_P(temp, 64, formatP, arg);
|
||||||
size_t fmtLen = strlen_P(formatP);
|
va_end(arg);
|
||||||
format = (char*)calloc(fmtLen+1, sizeof(char));
|
if (len > 63) {
|
||||||
if ( format ) {
|
buffer = new char[len + 1];
|
||||||
strcpy_P(format, formatP);
|
if (!buffer) {
|
||||||
char * msg = (char*)malloc(len+1);
|
|
||||||
if(msg == NULL){
|
|
||||||
va_end(arg);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
va_start(arg, formatP);
|
||||||
len = vsnprintf(msg, len, format, arg);
|
vsnprintf_P(buffer, len + 1, formatP, arg);
|
||||||
msg[len] = 0;
|
|
||||||
text(msg);
|
|
||||||
va_end(arg);
|
va_end(arg);
|
||||||
free(msg);
|
|
||||||
free(format);
|
|
||||||
}
|
}
|
||||||
|
text(buffer, len);
|
||||||
|
if (buffer != temp) {
|
||||||
|
delete[] buffer;
|
||||||
|
}
|
||||||
|
delete[] temp;
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -761,22 +760,27 @@ size_t AsyncWebSocket::printf(uint32_t id, const char *format, ...){
|
|||||||
size_t AsyncWebSocket::printfAll(const char *format, ...) {
|
size_t AsyncWebSocket::printfAll(const char *format, ...) {
|
||||||
va_list arg;
|
va_list arg;
|
||||||
va_start(arg, format);
|
va_start(arg, format);
|
||||||
#ifdef ESP8266
|
char* temp = new char[64];
|
||||||
//ToDo: figure out a way around this
|
if(!temp){
|
||||||
size_t len = 1440;
|
|
||||||
#else
|
|
||||||
size_t len = vsnprintf(NULL, 0, format, arg)+1;
|
|
||||||
#endif
|
|
||||||
char * msg = (char*)malloc(len+1);
|
|
||||||
if(msg == NULL){
|
|
||||||
va_end(arg);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
len = vsnprintf(msg, len, format, arg);
|
char* buffer = temp;
|
||||||
msg[len] = 0;
|
size_t len = vsnprintf(temp, 64, format, arg);
|
||||||
textAll(msg);
|
|
||||||
va_end(arg);
|
va_end(arg);
|
||||||
free(msg);
|
if (len > 63) {
|
||||||
|
buffer = new char[len + 1];
|
||||||
|
if (!buffer) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
va_start(arg, format);
|
||||||
|
vsnprintf(buffer, len + 1, format, arg);
|
||||||
|
va_end(arg);
|
||||||
|
}
|
||||||
|
textAll(buffer, len);
|
||||||
|
if (buffer != temp) {
|
||||||
|
delete[] buffer;
|
||||||
|
}
|
||||||
|
delete[] temp;
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -793,33 +797,29 @@ size_t AsyncWebSocket::printf_P(uint32_t id, PGM_P formatP, ...){
|
|||||||
}
|
}
|
||||||
|
|
||||||
size_t AsyncWebSocket::printfAll_P(PGM_P formatP, ...) {
|
size_t AsyncWebSocket::printfAll_P(PGM_P formatP, ...) {
|
||||||
char* format;
|
|
||||||
va_list arg;
|
va_list arg;
|
||||||
va_start(arg, formatP);
|
va_start(arg, formatP);
|
||||||
#ifdef ESP8266
|
char* temp = new char[64];
|
||||||
//ToDo: figure out a way around this
|
if(!temp){
|
||||||
size_t len = 1440;
|
return 0;
|
||||||
#else
|
}
|
||||||
size_t len = vsnprintf(NULL, 0, format, arg)+1;
|
char* buffer = temp;
|
||||||
#endif
|
size_t len = vsnprintf_P(temp, 64, formatP, arg);
|
||||||
size_t fmtLen = strlen_P(formatP);
|
va_end(arg);
|
||||||
format = (char*)calloc(fmtLen+1, sizeof(char));
|
if (len > 63) {
|
||||||
if ( format ) {
|
buffer = new char[len + 1];
|
||||||
strcpy_P(format, formatP);
|
if (!buffer) {
|
||||||
char * msg = (char*)malloc(len+1);
|
|
||||||
if(msg == NULL){
|
|
||||||
va_end(arg);
|
|
||||||
free(format);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
va_start(arg, formatP);
|
||||||
len = vsnprintf(msg, len, format, arg);
|
vsnprintf_P(buffer, len + 1, formatP, arg);
|
||||||
msg[len] = 0;
|
|
||||||
textAll(msg);
|
|
||||||
va_end(arg);
|
va_end(arg);
|
||||||
free(msg);
|
|
||||||
free(format);
|
|
||||||
}
|
}
|
||||||
|
textAll(buffer, len);
|
||||||
|
if (buffer != temp) {
|
||||||
|
delete[] buffer;
|
||||||
|
}
|
||||||
|
delete[] temp;
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -110,8 +110,8 @@ class AsyncWebSocketClient {
|
|||||||
//data packets
|
//data packets
|
||||||
void message(AsyncWebSocketMessage *message){ _queueMessage(message); }
|
void message(AsyncWebSocketMessage *message){ _queueMessage(message); }
|
||||||
|
|
||||||
size_t printf(const char *format, ...);
|
size_t printf(const char *format, ...) __attribute__ ((format (printf, 2, 3)));
|
||||||
size_t printf_P(PGM_P formatP, ...);
|
size_t printf_P(PGM_P formatP, ...) __attribute__ ((format (printf, 2, 3)));
|
||||||
|
|
||||||
void text(const char * message, size_t len);
|
void text(const char * message, size_t len);
|
||||||
void text(const char * message);
|
void text(const char * message);
|
||||||
@@ -194,10 +194,10 @@ class AsyncWebSocket: public AsyncWebHandler {
|
|||||||
void message(uint32_t id, AsyncWebSocketMessage *message);
|
void message(uint32_t id, AsyncWebSocketMessage *message);
|
||||||
void messageAll(AsyncWebSocketMessage *message);
|
void messageAll(AsyncWebSocketMessage *message);
|
||||||
|
|
||||||
size_t printf(uint32_t id, const char *format, ...);
|
size_t printf(uint32_t id, const char *format, ...) __attribute__ ((format (printf, 3, 4)));
|
||||||
size_t printfAll(const char *format, ...);
|
size_t printfAll(const char *format, ...) __attribute__ ((format (printf, 2, 3)));
|
||||||
size_t printf_P(uint32_t id, PGM_P formatP, ...);
|
size_t printf_P(uint32_t id, PGM_P formatP, ...) __attribute__ ((format (printf, 3, 4)));
|
||||||
size_t printfAll_P(PGM_P formatP, ...);
|
size_t printfAll_P(PGM_P formatP, ...) __attribute__ ((format (printf, 2, 3)));
|
||||||
|
|
||||||
//event listener
|
//event listener
|
||||||
void onEvent(AwsEventHandler handler){
|
void onEvent(AwsEventHandler handler){
|
||||||
|
@@ -69,7 +69,7 @@ AsyncWebServerRequest::AsyncWebServerRequest(AsyncWebServer* s, AsyncClient* c)
|
|||||||
{
|
{
|
||||||
c->onError([](void *r, AsyncClient* c, int8_t error){ AsyncWebServerRequest *req = (AsyncWebServerRequest*)r; req->_onError(error); }, this);
|
c->onError([](void *r, AsyncClient* c, int8_t error){ AsyncWebServerRequest *req = (AsyncWebServerRequest*)r; req->_onError(error); }, this);
|
||||||
c->onAck([](void *r, AsyncClient* c, size_t len, uint32_t time){ AsyncWebServerRequest *req = (AsyncWebServerRequest*)r; req->_onAck(len, time); }, this);
|
c->onAck([](void *r, AsyncClient* c, size_t len, uint32_t time){ AsyncWebServerRequest *req = (AsyncWebServerRequest*)r; req->_onAck(len, time); }, this);
|
||||||
c->onDisconnect([](void *r, AsyncClient* c){ AsyncWebServerRequest *req = (AsyncWebServerRequest*)r; req->_onDisconnect(); }, this);
|
c->onDisconnect([](void *r, AsyncClient* c){ AsyncWebServerRequest *req = (AsyncWebServerRequest*)r; req->_onDisconnect(); delete c; }, this);
|
||||||
c->onTimeout([](void *r, AsyncClient* c, uint32_t time){ AsyncWebServerRequest *req = (AsyncWebServerRequest*)r; req->_onTimeout(time); }, this);
|
c->onTimeout([](void *r, AsyncClient* c, uint32_t time){ AsyncWebServerRequest *req = (AsyncWebServerRequest*)r; req->_onTimeout(time); }, this);
|
||||||
c->onData([](void *r, AsyncClient* c, void *buf, size_t len){ AsyncWebServerRequest *req = (AsyncWebServerRequest*)r; req->_onData(buf, len); }, this);
|
c->onData([](void *r, AsyncClient* c, void *buf, size_t len){ AsyncWebServerRequest *req = (AsyncWebServerRequest*)r; req->_onData(buf, len); }, this);
|
||||||
c->onPoll([](void *r, AsyncClient* c){ AsyncWebServerRequest *req = (AsyncWebServerRequest*)r; req->_onPoll(); }, this);
|
c->onPoll([](void *r, AsyncClient* c){ AsyncWebServerRequest *req = (AsyncWebServerRequest*)r; req->_onPoll(); }, this);
|
||||||
@@ -192,8 +192,6 @@ void AsyncWebServerRequest::_onTimeout(uint32_t time){
|
|||||||
|
|
||||||
void AsyncWebServerRequest::_onDisconnect(){
|
void AsyncWebServerRequest::_onDisconnect(){
|
||||||
//os_printf("d\n");
|
//os_printf("d\n");
|
||||||
_client->free();
|
|
||||||
delete _client;
|
|
||||||
_server->_handleDisconnect(this);
|
_server->_handleDisconnect(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user