PsychichHTTP v2-dev
This commit is contained in:
47
lib/PsychicHttp/src/PsychicMiddlewareChain.cpp
Normal file
47
lib/PsychicHttp/src/PsychicMiddlewareChain.cpp
Normal file
@@ -0,0 +1,47 @@
|
||||
#include "PsychicMiddlewareChain.h"
|
||||
|
||||
PsychicMiddlewareChain::~PsychicMiddlewareChain()
|
||||
{
|
||||
for (auto middleware : _middleware)
|
||||
if (middleware->_freeOnRemoval)
|
||||
delete middleware;
|
||||
_middleware.clear();
|
||||
}
|
||||
|
||||
void PsychicMiddlewareChain::addMiddleware(PsychicMiddleware* middleware)
|
||||
{
|
||||
_middleware.push_back(middleware);
|
||||
}
|
||||
|
||||
void PsychicMiddlewareChain::addMiddleware(PsychicMiddlewareCallback fn)
|
||||
{
|
||||
PsychicMiddlewareFunction* closure = new PsychicMiddlewareFunction(fn);
|
||||
closure->_freeOnRemoval = true;
|
||||
_middleware.push_back(closure);
|
||||
}
|
||||
|
||||
void PsychicMiddlewareChain::removeMiddleware(PsychicMiddleware* middleware)
|
||||
{
|
||||
_middleware.remove(middleware);
|
||||
if (middleware->_freeOnRemoval)
|
||||
delete middleware;
|
||||
}
|
||||
|
||||
esp_err_t PsychicMiddlewareChain::runChain(PsychicRequest* request, PsychicMiddlewareNext finalizer)
|
||||
{
|
||||
if (_middleware.size() == 0)
|
||||
return finalizer();
|
||||
|
||||
PsychicMiddlewareNext next;
|
||||
std::list<PsychicMiddleware*>::iterator it = _middleware.begin();
|
||||
|
||||
next = [this, &next, &it, request, finalizer]() {
|
||||
if (it == _middleware.end())
|
||||
return finalizer();
|
||||
PsychicMiddleware* m = *it;
|
||||
it++;
|
||||
return m->run(request, request->response(), next);
|
||||
};
|
||||
|
||||
return next();
|
||||
}
|
||||
Reference in New Issue
Block a user