Hey Guys
Just a simple question!
this is a test for me!
I wanna bind a callback to specific port!
in other words, I need to make conditions on port numbers to send related response to client that sends request to specific port!
as you can see, we can just add some listeners having ip , port!
But addListener method has no any callback args!
drogon::app().addListener("0.0.0.0",20001);
drogon::app().addListener("0.0.0.0",20002);
drogon::app().addListener("0.0.0.0",20003);
drogon::HttpAppFramework::instance().registerHandler("/index",
[=](const drogon::HttpRequestPtr &req ,
std::function<void (const drogon::HttpResponsePtr &)> &&callback)
{
if (req ->port == 20001)
{
auto resp = drogon::HttpResponse::newFileResponse("/path/to/img01.jpg", "", drogon::ContentType::CT_IMAGE_JPG);
callback(resp);
}
else if (req ->port == 20002)
{
auto resp = drogon::HttpResponse::newFileResponse("/path/to/img02.jpg", "", drogon::ContentType::CT_IMAGE_JPG);
callback(resp);
}
else if (req ->port == 20003)
{
auto resp = drogon::HttpResponse::newFileResponse("/path/to/img03.jpg", "", drogon::ContentType::CT_IMAGE_JPG);
callback(resp);
}
});
in the top example, req->port has error because req has no any port member!
so I don't know how can I set conditions or bind callbacks on ports!
All The Best,
Hadi
/usr/src/drogon/lib/inc/drogon/IOThreadStorage.h:100: drogon::IOThreadStorage<C>::ValueType& drogon::IOThreadStorage<C>::getThreadData() [with C = std::shared_ptr<drogon::HttpResponse>; drogon::IOThreadStorage<C>::ValueType = std::shared_ptr<drogon::HttpResponse>]: Assertion `idx < storage_.size()' failed.
/usr/src/drogon/lib/inc/drogon/IOThreadStorage.h:100: drogon::IOThreadStorage<C>::ValueType& drogon::IOThreadStorage<C>::getThreadData() [with C = std::shared_ptr<drogon::HttpResponse>; drogon::IOThreadStorage<C>::ValueType = std::shared_ptr<drogon::HttpResponse>]: Assertion `idx < storage_.size()' failed.
The error usually means the done callback is not in an IO threads of drogon. if you use dbClients, please use the Fast database clients, because it uses the IO threads.
how to disable Ctrl+C feature? when I press Ctrl+C it shouldn't quit. It shouldn't handle anything like that.
/// Disable the handling of SIGTERM signal.
/**
* Enabled by default.
*
* @note
* This operation can be performed by an option in the configuration file.
* When disabled setTermSignalHandler() is useless
*/
virtual HttpAppFramework &disableSigtermHandling() = 0;
project(Mozart)
cmake_minimum_required(VERSION 3.14)
cmake_policy(SET CMP0015 NEW)
if(POLICY CMP0074)
cmake_policy(SET CMP0074 NEW)
endif()
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Debug)
endif()
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
add_custom_target(fetch_packages)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP")
add_definitions(-DNOMINMAX)
add_definitions(-DCOMMIT="${GIT_COMMIT_HASH}")
if(ENABLE_ASAN)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -fsanitize=address,undefined")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fno-omit-frame-pointer -fsanitize=address,undefined")
endif()
if(ENABLE_TSAN)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -fsanitize=thread")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fno-omit-frame-pointer -fsanitize=thread")
endif()
include(GitRevision)
include(FetchContent)
# Open source libraries
find_package(Boost REQUIRED)
find_package(Git REQUIRED)
find_package(Drogon REQUIRED)
include_directories(SYSTEM ${Boost_INCLUDE_DIRS})
include_directories(SYSTEM ${json_INCLUDE_DIR})
include_directories(SYSTEM ${CMAKE_BINARY_DIR})
link_directories(${Boost_LIBRARY_DIRS})
link_directories(${Boost_LIBRARIES})
add_subdirectory(src)
include(cmake/Docker.cmake)
Hello
Is it possible to define PATH_ADD with regular expression on input path (as regex-pattern)?
suppose that I wanna create a dynamicFileLoaderCtrl which can load files, So it can send response to client dynamically!
I don't want bind some specific static URLs in my controller!
and it must load the ordered file if it exists, otherwise it must callback error 404!
just I wanna know regex on PATH_ADD possibility!
PATH_ADD_VIA_REGEX("/*.*",Get,Post);
//get request info & load & send file to client
Thanks A Lot...
All The Best,
Hadi
DROGON_ROUTE("/parent/child1", functionBind1, "auth")
DROGON_ROUTE("/parent/child2", functionBind2, "auth")
ADD_METHOD_TO(PageCtrl::RootRout,"",{Get , Post , Put , Patch , Delete , Head});
ADD_METHOD_TO(PageCtrl::RootRout,"/",{Get , Post , Put , Patch , Delete , Head});
METHOD_ADD(PageCtrl::RootRout,"",{Get , Post , Put , Patch , Delete , Head});
METHOD_ADD(PageCtrl::RootRout,"/",{Get , Post , Put , Patch , Delete , Head});
new
but it seg faults upon deletion.