From 031615ac866cc3c8f1900dd4b4aae2106ad31230 Mon Sep 17 00:00:00 2001 From: ipknHama Date: Thu, 7 Aug 2014 01:18:33 +0900 Subject: source resturcturing + CMake --- include/crow.h | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 include/crow.h (limited to 'include/crow.h') diff --git a/include/crow.h b/include/crow.h new file mode 100644 index 0000000..55572bf --- /dev/null +++ b/include/crow.h @@ -0,0 +1,89 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +#include "settings.h" +#include "logging.h" +#include "http_server.h" +#include "utility.h" +#include "routing.h" + +// TEST +#include + +#define CROW_ROUTE(app, url) app.route(url) + +namespace crow +{ + class Crow + { + public: + using self_t = Crow; + Crow() + { + } + + void handle(const request& req, response& res) + { + return router_.handle(req, res); + } + + template + auto route(std::string&& rule) + -> typename std::result_of)(Router, std::string&&)>::type + { + return router_.new_rule_tagged(std::move(rule)); + } + + self_t& port(std::uint16_t port) + { + port_ = port; + return *this; + } + + self_t& multithreaded() + { + return concurrency(std::thread::hardware_concurrency()); + } + + self_t& concurrency(std::uint16_t concurrency) + { + if (concurrency < 1) + concurrency = 1; + concurrency_ = concurrency; + return *this; + } + + void validate() + { + router_.validate(); + } + + void run() + { + validate(); + Server server(this, port_, concurrency_); + server.run(); + } + + void debug_print() + { + CROW_LOG_DEBUG << "Routing:"; + router_.debug_print(); + } + + private: + uint16_t port_ = 80; + uint16_t concurrency_ = 1; + + Router router_; + }; + using App = Crow; +}; + -- cgit v1.2.3-54-g00ecf