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/http_server.h | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 include/http_server.h (limited to 'include/http_server.h') diff --git a/include/http_server.h b/include/http_server.h new file mode 100644 index 0000000..9381fdb --- /dev/null +++ b/include/http_server.h @@ -0,0 +1,81 @@ +#pragma once + +#include +#include +#include + +#include + +#include "http_connection.h" +#include "datetime.h" +#include "logging.h" + +namespace crow +{ + using namespace boost; + using tcp = asio::ip::tcp; + + template + class Server + { + public: + Server(Handler* handler, uint16_t port, uint16_t concurrency = 1) + : acceptor_(io_service_, tcp::endpoint(asio::ip::address(), port)), + socket_(io_service_), + signals_(io_service_, SIGINT, SIGTERM), + handler_(handler), + concurrency_(concurrency), + port_(port) + { + do_accept(); + } + + void run() + { + std::vector> v; + for(uint16_t i = 0; i < concurrency_; i ++) + v.push_back( + std::async(std::launch::async, [this]{io_service_.run();}) + ); + + CROW_LOG_INFO << server_name_ << " server is running, local port " << port_; + + signals_.async_wait( + [&](const boost::system::error_code& error, int signal_number){ + io_service_.stop(); + }); + + } + + void stop() + { + io_service_.stop(); + } + + private: + void do_accept() + { + acceptor_.async_accept(socket_, + [this](boost::system::error_code ec) + { + if (!ec) + { + auto p = std::make_shared>(std::move(socket_), handler_, server_name_); + p->start(); + } + do_accept(); + }); + } + + private: + asio::io_service io_service_; + tcp::acceptor acceptor_; + tcp::socket socket_; + boost::asio::signal_set signals_; + + Handler* handler_; + uint16_t concurrency_{1}; + std::string server_name_ = "Crow/0.1"; + uint16_t port_; + }; +} -- cgit v1.2.3-54-g00ecf