26template <
typename ClientType,
typename ServerType>
29 bool is_started_ =
false;
33 int taskStackSize = 1024 * 8,
int taskPriority = 1)
34 :
HttpServer<ClientType, ServerType>(server, bufferSize),
45 "HttpServerUsingTasks::begin() called but already started");
53 "HttpServerUsingTasks::begin() failed to start base HttpServer");
60 ClientType client = this->
server_ptr->accept();
61 if (client.connected()) {
62 client.setNoDelay(true);
64 new Task(
"HttpClientTask", taskStackSize_, taskPriority_));
65 Task* clientTask = tasks_.back().get();
66 clientTask->begin([this, client, clientTask]() mutable {
67 this->handleClientTask(client);
69 DlnaLogger.log(DlnaLogLevel::Debug,
"Removing client");
74 "HttpServerUsingTasks::begin() server_ptr is null");
81 result ?
"true" :
"false");
87 if (!is_started_)
return;
89 for (
auto& t : tasks_) {
97 bool doLoop()
override {
return true; }
102 "HttpServerUsingTasks: handling new client");
104 while (client.connected()) {
111 "HttpServerUsingTasks: client disconnected");
115 auto it = std::remove_if(
116 tasks_.begin(), tasks_.end(),
117 [task](
const std::unique_ptr<Task>& t) { return t.get() == task; });
118 tasks_.erase(it, tasks_.end());
122 std::vector<std::unique_ptr<Task>>
tasks_;
134 for (
auto handler_line_ptr : this->handler_collection) {
137 this->nullstr(handler_line_ptr->path.c_str()),
138 methods[handler_line_ptr->method],
139 this->nullstr(handler_line_ptr->mime));
141 if (pathStr.
matches(handler_line_ptr->path.c_str()) &&
143 this->matchesMime(this->nullstr(handler_line_ptr->mime),
147 this->nullstr(handler_line_ptr->path.c_str()));
148 handler_line_ptr->fn(handler,
this, path, handler_line_ptr);
Handles HTTP client connections and responses for the DLNA HTTP server.
Definition: HttpClientHandler.h:30
HttpRequestHeader & requestHeader()
Definition: HttpClientHandler.h:192
void readHttpHeader()
Reads the http header info from the client.
Definition: HttpClientHandler.h:42
Experimental HTTP server implementation that handles each client in a separate task.
Definition: HttpServerUsingTasks.h:27
Task accept_task_
Definition: HttpServerUsingTasks.h:121
void removeTask(Task *task)
Definition: HttpServerUsingTasks.h:114
int taskStackSize_
Definition: HttpServerUsingTasks.h:123
void handleClientTask(ClientType &client)
Definition: HttpServerUsingTasks.h:100
int taskPriority_
Definition: HttpServerUsingTasks.h:124
~HttpServerUsingTasks()
Definition: HttpServerUsingTasks.h:38
HttpServerUsingTasks(ServerType &server, int bufferSize=1024, int taskStackSize=1024 *8, int taskPriority=1)
Definition: HttpServerUsingTasks.h:32
std::vector< std::unique_ptr< Task > > tasks_
Definition: HttpServerUsingTasks.h:122
bool doLoop() override
Process server loop.
Definition: HttpServerUsingTasks.h:97
void end() override
Definition: HttpServerUsingTasks.h:85
bool begin() override
Definition: HttpServerUsingTasks.h:40
bool onRequest(const char *path, HttpClientHandler< ClientType > &handler)
processing logic
Definition: HttpServerUsingTasks.h:127
Header-only HTTP server wrapper that registers callback handlers.
Definition: HttpServer.h:37
bool isActive() override
Definition: HttpServer.h:299
ServerType * server_ptr
Definition: HttpServer.h:339
void end() override
stops the server_ptr
Definition: HttpServer.h:69
bool begin() override
Starts the server.
Definition: HttpServer.h:61
A simple wrapper to provide string functions on char*. If the underlying char* is a const we do not a...
Definition: StrView.h:18
virtual bool matches(const char *pattern)
Definition: StrView.h:207
virtual bool replace(const char *toReplace, const int replaced)
Replaces the first instance of toReplace with replaced.
Definition: StrView.h:395
FreeRTOS task.
Definition: TaskRTOS.h:23
bool begin(std::function< void()> process)
Definition: TaskRTOS.h:45
Definition: Allocator.h:13
const char * methods[]
Definition: HttpHeader.h:50