aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoripknHama <ipknhama@gmail.com>2015-02-21 05:46:28 +0900
committeripknHama <ipknhama@gmail.com>2015-02-21 05:46:28 +0900
commit686e5e220b782ef47b5c59271a946bd9603de1d1 (patch)
tree3e2154d22514f78889fb6da0eae991e9526dd7d8
parent48811ce4a47200567796730d7467526683f265d7 (diff)
downloadcrow-686e5e220b782ef47b5c59271a946bd9603de1d1.tar.gz
crow-686e5e220b782ef47b5c59271a946bd9603de1d1.zip
Add working example for VS2013 and update CMakeList.txt
-rw-r--r--CMakeLists.txt13
-rw-r--r--examples/CMakeLists.txt7
-rw-r--r--examples/example_vs.cpp132
3 files changed, 150 insertions, 2 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2b6a151..07a058b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -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()
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index 83b5478..6b42d49 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -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()
diff --git a/examples/example_vs.cpp b/examples/example_vs.cpp
new file mode 100644
index 0000000..95f46b0
--- /dev/null
+++ b/examples/example_vs.cpp
@@ -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();
+}