mirror of
https://github.com/me-no-dev/ESPAsyncWebServer.git
synced 2025-07-30 02:37:32 +02:00
rework SSE for String's instead of std::string
This commit is contained in:
@ -25,8 +25,8 @@
|
|||||||
|
|
||||||
using namespace asyncsrv;
|
using namespace asyncsrv;
|
||||||
|
|
||||||
static std::string generateEventMessage(const char* message, const char* event, uint32_t id, uint32_t reconnect) {
|
static String generateEventMessage(const char* message, const char* event, uint32_t id, uint32_t reconnect) {
|
||||||
std::string str;
|
String str;
|
||||||
size_t len{0};
|
size_t len{0};
|
||||||
if (message)
|
if (message)
|
||||||
len += strlen(message);
|
len += strlen(message);
|
||||||
@ -96,7 +96,7 @@ static std::string generateEventMessage(const char* message, const char* event,
|
|||||||
}
|
}
|
||||||
|
|
||||||
str += T_data_;
|
str += T_data_;
|
||||||
str.append(lineStart, lineEnd - lineStart);
|
str.concat(lineStart, lineEnd - lineStart);
|
||||||
str += 0xa; // \n
|
str += 0xa; // \n
|
||||||
|
|
||||||
lineStart = nextLine;
|
lineStart = nextLine;
|
||||||
@ -112,10 +112,10 @@ static std::string generateEventMessage(const char* message, const char* event,
|
|||||||
|
|
||||||
size_t AsyncEventSourceMessage::ack(size_t len, __attribute__((unused)) uint32_t time) {
|
size_t AsyncEventSourceMessage::ack(size_t len, __attribute__((unused)) uint32_t time) {
|
||||||
// If the whole message is now acked...
|
// If the whole message is now acked...
|
||||||
if (_acked + len > _data->size()) {
|
if (_acked + len > _data->length()) {
|
||||||
// Return the number of extra bytes acked (they will be carried on to the next message)
|
// Return the number of extra bytes acked (they will be carried on to the next message)
|
||||||
const size_t extra = _acked + len - _data->size();
|
const size_t extra = _acked + len - _data->length();
|
||||||
_acked = _data->size();
|
_acked = _data->length();
|
||||||
return extra;
|
return extra;
|
||||||
}
|
}
|
||||||
// Return that no extra bytes left.
|
// Return that no extra bytes left.
|
||||||
@ -127,11 +127,11 @@ size_t AsyncEventSourceMessage::write(AsyncClient* client) {
|
|||||||
if (!client)
|
if (!client)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (_sent >= _data->size() || !client->canSend()) {
|
if (_sent >= _data->length() || !client->canSend()) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t len = std::min(_data->size() - _sent, client->space());
|
size_t len = std::min(_data->length() - _sent, client->space());
|
||||||
/*
|
/*
|
||||||
add() would call lwip's tcp_write() under the AsyncTCP hood with apiflags argument.
|
add() would call lwip's tcp_write() under the AsyncTCP hood with apiflags argument.
|
||||||
By default apiflags=ASYNC_WRITE_FLAG_COPY
|
By default apiflags=ASYNC_WRITE_FLAG_COPY
|
||||||
@ -143,7 +143,7 @@ size_t AsyncEventSourceMessage::write(AsyncClient* client) {
|
|||||||
|
|
||||||
So let's just keep it enforced ASYNC_WRITE_FLAG_COPY and keep in mind that there is no zero-copy
|
So let's just keep it enforced ASYNC_WRITE_FLAG_COPY and keep in mind that there is no zero-copy
|
||||||
*/
|
*/
|
||||||
size_t written = client->add(_data->data() + _sent, len, ASYNC_WRITE_FLAG_COPY); // ASYNC_WRITE_FLAG_MORE
|
size_t written = client->add(_data->c_str() + _sent, len, ASYNC_WRITE_FLAG_COPY); // ASYNC_WRITE_FLAG_MORE
|
||||||
_sent += written;
|
_sent += written;
|
||||||
return written;
|
return written;
|
||||||
}
|
}
|
||||||
@ -298,7 +298,7 @@ void AsyncEventSourceClient::close() {
|
|||||||
bool AsyncEventSourceClient::send(const char* message, const char* event, uint32_t id, uint32_t reconnect) {
|
bool AsyncEventSourceClient::send(const char* message, const char* event, uint32_t id, uint32_t reconnect) {
|
||||||
if (!connected())
|
if (!connected())
|
||||||
return false;
|
return false;
|
||||||
return _queueMessage(std::make_shared<std::string>(generateEventMessage(message, event, id, reconnect)));
|
return _queueMessage(std::make_shared<String>(generateEventMessage(message, event, id, reconnect)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void AsyncEventSourceClient::_runQueue() {
|
void AsyncEventSourceClient::_runQueue() {
|
||||||
@ -397,7 +397,7 @@ size_t AsyncEventSource::avgPacketsWaiting() const {
|
|||||||
|
|
||||||
AsyncEventSource::SendStatus AsyncEventSource::send(
|
AsyncEventSource::SendStatus AsyncEventSource::send(
|
||||||
const char* message, const char* event, uint32_t id, uint32_t reconnect) {
|
const char* message, const char* event, uint32_t id, uint32_t reconnect) {
|
||||||
AsyncEvent_SharedData_t shared_msg = std::make_shared<std::string>(generateEventMessage(message, event, id, reconnect));
|
AsyncEvent_SharedData_t shared_msg = std::make_shared<String>(generateEventMessage(message, event, id, reconnect));
|
||||||
#ifdef ESP32
|
#ifdef ESP32
|
||||||
std::lock_guard<std::mutex> lock(_client_queue_lock);
|
std::lock_guard<std::mutex> lock(_client_queue_lock);
|
||||||
#endif
|
#endif
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
#define ASYNCEVENTSOURCE_H_
|
#define ASYNCEVENTSOURCE_H_
|
||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <string>
|
|
||||||
#ifdef ESP32
|
#ifdef ESP32
|
||||||
#include <AsyncTCP.h>
|
#include <AsyncTCP.h>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
@ -61,7 +61,7 @@ class AsyncEventSourceClient;
|
|||||||
using ArEventHandlerFunction = std::function<void(AsyncEventSourceClient* client)>;
|
using ArEventHandlerFunction = std::function<void(AsyncEventSourceClient* client)>;
|
||||||
using ArAuthorizeConnectHandler = ArAuthorizeFunction;
|
using ArAuthorizeConnectHandler = ArAuthorizeFunction;
|
||||||
// shared message object container
|
// shared message object container
|
||||||
using AsyncEvent_SharedData_t = std::shared_ptr<std::string>;
|
using AsyncEvent_SharedData_t = std::shared_ptr<String>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Async Event Message container with shared message content data
|
* @brief Async Event Message container with shared message content data
|
||||||
@ -76,7 +76,12 @@ class AsyncEventSourceMessage {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
AsyncEventSourceMessage(AsyncEvent_SharedData_t data) : _data(data) {};
|
AsyncEventSourceMessage(AsyncEvent_SharedData_t data) : _data(data) {};
|
||||||
AsyncEventSourceMessage(const char* data, size_t len) : _data(std::make_shared<std::string>(data, len)) {};
|
#ifdef ESP32
|
||||||
|
AsyncEventSourceMessage(const char* data, size_t len) : _data(std::make_shared<String>(data, len)) {};
|
||||||
|
#else
|
||||||
|
// esp8266's String does not have constructor with data/length arguments. Use a concat method here
|
||||||
|
AsyncEventSourceMessage(const char* data, size_t len) { _data->concat(data, len); };
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief acknowledge sending len bytes of data
|
* @brief acknowledge sending len bytes of data
|
||||||
|
Reference in New Issue
Block a user