mirror of https://github.com/CrowCpp/Crow.git
Add working example for VS2013 and update CMakeList.txt
This commit is contained in:
parent
48811ce4a4
commit
686e5e220b
|
@ -9,9 +9,15 @@ if (NOT CMAKE_BUILD_TYPE)
|
|||
set(CMAKE_BUILD_TYPE "Release")
|
||||
endif()
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=c++1y")
|
||||
|
||||
if (MSVC)
|
||||
set(Boost_USE_STATIC_LIBS "On")
|
||||
find_package( Boost 1.52 COMPONENTS date_time filesystem system thread regex REQUIRED )
|
||||
else()
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=c++1y")
|
||||
find_package( Boost 1.52 COMPONENTS date_time filesystem system thread REQUIRED )
|
||||
endif()
|
||||
|
||||
include_directories( ${Boost_INCLUDE_DIR} )
|
||||
|
||||
set(PROJECT_INCLUDE_DIR
|
||||
|
@ -22,8 +28,10 @@ include_directories("${PROJECT_INCLUDE_DIR}")
|
|||
include_directories("${PROJECT_SOURCE_DIR}")
|
||||
|
||||
#add_subdirectory(src)
|
||||
add_subdirectory(tests)
|
||||
add_subdirectory(examples)
|
||||
if (MSVC)
|
||||
else()
|
||||
add_subdirectory(tests)
|
||||
|
||||
enable_testing()
|
||||
add_test(NAME crow_test COMMAND ${CMAKE_CURRENT_BINARY_DIR}/tests/unittest)
|
||||
|
@ -39,3 +47,4 @@ add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/amalgamate/crow_all.h
|
|||
)
|
||||
|
||||
add_custom_target(amalgamation ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/amalgamate/crow_all.h)
|
||||
endif()
|
||||
|
|
|
@ -1,5 +1,11 @@
|
|||
cmake_minimum_required(VERSION 2.8)
|
||||
project (crow_examples)
|
||||
|
||||
if (MSVC)
|
||||
add_executable(example_vs example_vs.cpp)
|
||||
target_link_libraries(example_vs ${Boost_LIBRARIES})
|
||||
target_link_libraries(example_vs ${CMAKE_THREAD_LIBS_INIT})
|
||||
else ()
|
||||
|
||||
add_executable(example example.cpp)
|
||||
#target_link_libraries(example crow)
|
||||
|
@ -35,3 +41,4 @@ add_custom_target(example_chat_copy ALL DEPENDS example_chat.html)
|
|||
|
||||
#SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -pg" )
|
||||
#SET( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -g -pg" )
|
||||
endif()
|
||||
|
|
|
@ -0,0 +1,132 @@
|
|||
#include "crow.h"
|
||||
#include "json.h"
|
||||
|
||||
#include <sstream>
|
||||
|
||||
class ExampleLogHandler : public crow::ILogHandler {
|
||||
public:
|
||||
void log(std::string message, crow::LogLevel level) override {
|
||||
// cerr << "ExampleLogHandler -> " << message;
|
||||
}
|
||||
};
|
||||
|
||||
struct ExampleMiddleware
|
||||
{
|
||||
std::string message;
|
||||
|
||||
ExampleMiddleware()
|
||||
{
|
||||
message = "foo";
|
||||
}
|
||||
|
||||
void setMessage(std::string newMsg)
|
||||
{
|
||||
message = newMsg;
|
||||
}
|
||||
|
||||
struct context
|
||||
{
|
||||
};
|
||||
|
||||
void before_handle(crow::request& req, crow::response& res, context& ctx)
|
||||
{
|
||||
CROW_LOG_DEBUG << " - MESSAGE: " << message;
|
||||
}
|
||||
|
||||
void after_handle(crow::request& req, crow::response& res, context& ctx)
|
||||
{
|
||||
// no-op
|
||||
}
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
crow::App<ExampleMiddleware> app;
|
||||
|
||||
app.get_middleware<ExampleMiddleware>().setMessage("hello");
|
||||
|
||||
app.route_dynamic("/")
|
||||
([]{
|
||||
return "Hello World!";
|
||||
});
|
||||
|
||||
app.route_dynamic("/about")
|
||||
([](){
|
||||
return "About Crow example.";
|
||||
});
|
||||
|
||||
// a request to /path should be forwarded to /path/
|
||||
app.route_dynamic("/path/")
|
||||
([](){
|
||||
return "Trailing slash test case..";
|
||||
});
|
||||
|
||||
// simple json response
|
||||
app.route_dynamic("/json")
|
||||
([]{
|
||||
crow::json::wvalue x;
|
||||
x["message"] = "Hello, World!";
|
||||
return x;
|
||||
});
|
||||
|
||||
app.route_dynamic("/hello/<int>")
|
||||
([](int count){
|
||||
if (count > 100)
|
||||
return crow::response(400);
|
||||
std::ostringstream os;
|
||||
os << count << " bottles of beer!";
|
||||
return crow::response(os.str());
|
||||
});
|
||||
|
||||
app.route_dynamic("/add/<int>/<int>")
|
||||
([](const crow::request& req, crow::response& res, int a, int b){
|
||||
std::ostringstream os;
|
||||
os << a+b;
|
||||
res.write(os.str());
|
||||
res.end();
|
||||
});
|
||||
|
||||
// Compile error with message "Handler type is mismatched with URL paramters"
|
||||
//CROW_ROUTE(app,"/another/<int>")
|
||||
//([](int a, int b){
|
||||
//return crow::response(500);
|
||||
//});
|
||||
|
||||
// more json example
|
||||
app.route_dynamic("/add_json")
|
||||
.methods(crow::HTTPMethod::POST)
|
||||
([](const crow::request& req){
|
||||
auto x = crow::json::load(req.body);
|
||||
if (!x)
|
||||
return crow::response(400);
|
||||
auto sum = x["a"].i()+x["b"].i();
|
||||
std::ostringstream os;
|
||||
os << sum;
|
||||
return crow::response{os.str()};
|
||||
});
|
||||
|
||||
app.route_dynamic("/params")
|
||||
([](const crow::request& req){
|
||||
std::ostringstream os;
|
||||
os << "Params: " << req.url_params << "\n\n";
|
||||
os << "The key 'foo' was " << (req.url_params.get("foo") == nullptr ? "not " : "") << "found.\n";
|
||||
if(req.url_params.get("pew") != nullptr) {
|
||||
double countD = boost::lexical_cast<double>(req.url_params.get("pew"));
|
||||
os << "The value of 'pew' is " << countD << '\n';
|
||||
}
|
||||
auto count = req.url_params.get_list("count");
|
||||
os << "The key 'count' contains " << count.size() << " value(s).\n";
|
||||
for(const auto& countVal : count) {
|
||||
os << " - " << countVal << '\n';
|
||||
}
|
||||
return crow::response{os.str()};
|
||||
});
|
||||
|
||||
// ignore all log
|
||||
crow::logger::setLogLevel(crow::LogLevel::DEBUG);
|
||||
//crow::logger::setHandler(std::make_shared<ExampleLogHandler>());
|
||||
|
||||
app.port(18080)
|
||||
.multithreaded()
|
||||
.run();
|
||||
}
|
Loading…
Reference in New Issue