Added an update interval setting to the web server. Also update will get called if it's > 0.

This commit is contained in:
Relintai 2022-02-10 16:59:31 +01:00
parent 26d161fd26
commit e705cbca34
3 changed files with 41 additions and 32 deletions

View File

@ -28,6 +28,7 @@ void WebServer::handle_request(Request *request) {
WebServer::WebServer() : NodeTree() { WebServer::WebServer() : NodeTree() {
_web_root = nullptr; _web_root = nullptr;
_update_interval = 0.5;
} }
WebServer::~WebServer() { WebServer::~WebServer() {

View File

@ -21,7 +21,7 @@ public:
protected: protected:
WebNode *_web_root; WebNode *_web_root;
float _update_interval;
}; };
#endif #endif

View File

@ -12,8 +12,8 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include "core/net/tcp_connection.h"
#include "core/log/async_file_logger.h" #include "core/log/async_file_logger.h"
#include "core/net/tcp_connection.h"
#include <fcntl.h> #include <fcntl.h>
#include <sys/stat.h> #include <sys/stat.h>
@ -192,11 +192,11 @@ void DrogonWebServer::run() {
}); });
}*/ }*/
//httpCtrlsRouterPtr_->init(ioLoops); // httpCtrlsRouterPtr_->init(ioLoops);
//httpSimpleCtrlsRouterPtr_->init(ioLoops); // httpSimpleCtrlsRouterPtr_->init(ioLoops);
//staticFileRouterPtr_->init(ioLoops); // staticFileRouterPtr_->init(ioLoops);
//websockCtrlsRouterPtr_->init(); // websockCtrlsRouterPtr_->init();
get_loop()->queueInLoop([this]() { get_loop()->queueInLoop([this]() {
// Let listener event loops run when everything is ready. // Let listener event loops run when everything is ready.
@ -209,6 +209,14 @@ void DrogonWebServer::run() {
_beginning_advices.clear(); _beginning_advices.clear();
}); });
if (_update_interval > 0) {
get_loop()->runEvery(_update_interval, [this]() {
this->update();
});
}
//
get_loop()->loop(); get_loop()->loop();
} }
@ -224,7 +232,7 @@ void DrogonWebServer::disable_session() {
_use_session = false; _use_session = false;
} }
//todo think about it // todo think about it
const std::string &DrogonWebServer::get_document_root() const { const std::string &DrogonWebServer::get_document_root() const {
return _root_path; return _root_path;
} }
@ -249,8 +257,8 @@ void DrogonWebServer::set_upload_path(const std::string &uploadPath) {
_upload_path = uploadPath; _upload_path = uploadPath;
} }
void DrogonWebServer::set_file_types(const std::vector<std::string> &types) { void DrogonWebServer::set_file_types(const std::vector<std::string> &types) {
//staticFileRouterPtr_->setFileTypes(types); // staticFileRouterPtr_->setFileTypes(types);
//return *this; // return *this;
} }
void DrogonWebServer::set_max_connection_num(size_t maxConnections) { void DrogonWebServer::set_max_connection_num(size_t maxConnections) {
@ -311,11 +319,11 @@ bool DrogonWebServer::is_brotli_enabled() const {
} }
void DrogonWebServer::set_static_files_cache_time(int cacheTime) { void DrogonWebServer::set_static_files_cache_time(int cacheTime) {
//staticFileRouterPtr_->setStaticFilesCacheTime(cacheTime); // staticFileRouterPtr_->setStaticFilesCacheTime(cacheTime);
} }
int DrogonWebServer::static_files_cache_time() const { int DrogonWebServer::static_files_cache_time() const {
//return staticFileRouterPtr_->staticFilesCacheTime(); // return staticFileRouterPtr_->staticFilesCacheTime();
return 0; return 0;
} }
@ -330,10 +338,10 @@ void DrogonWebServer::set_pipelining_requests_number(const size_t number) {
} }
void DrogonWebServer::set_gzip_static(bool useGzipStatic) { void DrogonWebServer::set_gzip_static(bool useGzipStatic) {
//staticFileRouterPtr_->setGzipStatic(useGzipStatic); // staticFileRouterPtr_->setGzipStatic(useGzipStatic);
} }
void DrogonWebServer::set_br_static(bool useGzipStatic) { void DrogonWebServer::set_br_static(bool useGzipStatic) {
//staticFileRouterPtr_->setBrStatic(useGzipStatic); // staticFileRouterPtr_->setBrStatic(useGzipStatic);
} }
void DrogonWebServer::set_client_max_body_size(size_t maxSize) { void DrogonWebServer::set_client_max_body_size(size_t maxSize) {
@ -354,18 +362,18 @@ const std::string &DrogonWebServer::get_home_page() const {
} }
void DrogonWebServer::set_implicit_page_enable(bool useImplicitPage) { void DrogonWebServer::set_implicit_page_enable(bool useImplicitPage) {
//staticFileRouterPtr_->setImplicitPageEnable(useImplicitPage); // staticFileRouterPtr_->setImplicitPageEnable(useImplicitPage);
} }
bool DrogonWebServer::is_implicit_page_enabled() const { bool DrogonWebServer::is_implicit_page_enabled() const {
//return staticFileRouterPtr_->isImplicitPageEnabled(); // return staticFileRouterPtr_->isImplicitPageEnabled();
return false; return false;
} }
void DrogonWebServer::set_implicit_page(const std::string &implicitPageFile) { void DrogonWebServer::set_implicit_page(const std::string &implicitPageFile) {
//staticFileRouterPtr_->setImplicitPage(implicitPageFile); // staticFileRouterPtr_->setImplicitPage(implicitPageFile);
} }
const std::string &DrogonWebServer::get_implicit_page() const { const std::string &DrogonWebServer::get_implicit_page() const {
//return staticFileRouterPtr_->getImplicitPage(); // return staticFileRouterPtr_->getImplicitPage();
static std::string s = ""; static std::string s = "";
return s; return s;
} }
@ -516,17 +524,17 @@ void DrogonWebServer::on_async_request(const HttpRequestImplPtr &req, std::funct
} }
*/ */
//void HttpSimpleControllersRouter::route(const HttpRequestImplPtr &req,std::function<void(const HttpResponsePtr &)> &&callback) // void HttpSimpleControllersRouter::route(const HttpRequestImplPtr &req,std::function<void(const HttpResponsePtr &)> &&callback)
//auto resp = HttpResponse::newHttpResponse(); // auto resp = HttpResponse::newHttpResponse();
//resp->setBody("<p>Hello, world!</p>"); // resp->setBody("<p>Hello, world!</p>");
//resp->setExpiredTime(0); // resp->setExpiredTime(0);
//callback(resp); // callback(resp);
DRequest *request = DRequest::get(); DRequest *request = DRequest::get();
request->server = this; request->server = this;
request->request = std::shared_ptr<drogon::HttpRequestImpl>(req); request->request = std::shared_ptr<drogon::HttpRequestImpl>(req);
request->callback = callback; //std::move(callback); request->callback = callback; // std::move(callback);
request->setup_url_stack(); request->setup_url_stack();
@ -636,13 +644,13 @@ void DrogonWebServer::find_session_for_request(const HttpRequestImplPtr &req) {
} }
} }
//to request // to request
//void forward(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback,const std::string &hostString,double timeout); // void forward(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback,const std::string &hostString,double timeout);
//void forward(const HttpRequestImplPtr &req,std::function<void(const HttpResponsePtr &)> &&callback,const std::string &hostString,double timeout = 0); // void forward(const HttpRequestImplPtr &req,std::function<void(const HttpResponsePtr &)> &&callback,const std::string &hostString,double timeout = 0);
DrogonWebServer::DrogonWebServer() : DrogonWebServer::DrogonWebServer() :
_listener_manager(new ListenerManager()), WebServer() { _listener_manager(new ListenerManager()), WebServer() {
//staticFileRouterPtr_(new StaticFileRouter{}), // staticFileRouterPtr_(new StaticFileRouter{}),
/* /*
httpCtrlsRouterPtr_(new HttpControllersRouter(*staticFileRouterPtr_, httpCtrlsRouterPtr_(new HttpControllersRouter(*staticFileRouterPtr_,
postRoutingAdvices_, postRoutingAdvices_,
@ -657,12 +665,12 @@ DrogonWebServer::DrogonWebServer() :
preHandlingAdvices_, preHandlingAdvices_,
preHandlingObservers_, preHandlingObservers_,
postHandlingAdvices_)),*/ postHandlingAdvices_)),*/
//websockCtrlsRouterPtr_( // websockCtrlsRouterPtr_(
// new WebsocketControllersRouter(postRoutingAdvices_, // new WebsocketControllersRouter(postRoutingAdvices_,
// postRoutingObservers_)), // postRoutingObservers_)),
//listenerManagerPtr_(new ListenerManager), // listenerManagerPtr_(new ListenerManager),
//pluginsManagerPtr_(new PluginsManager), // pluginsManagerPtr_(new PluginsManager),
//uploadPath_(rootPath_ + "uploads") { // uploadPath_(rootPath_ + "uploads") {
_loop = new EventLoop(); _loop = new EventLoop();