openmw-tes3coop/apps/master/SimpleWeb/http_server.hpp

43 lines
1.3 KiB
C++
Raw Normal View History

2017-09-12 12:21:32 +00:00
#pragma once
2017-05-19 16:02:12 +00:00
#include "base_server.hpp"
2017-09-12 12:21:32 +00:00
namespace SimpleWeb {
2017-05-19 16:02:12 +00:00
2017-09-12 12:21:32 +00:00
template <class socket_type>
2017-05-19 16:02:12 +00:00
class Server : public ServerBase<socket_type> {};
2017-09-12 12:21:32 +00:00
using HTTP = asio::ip::tcp::socket;
2017-05-19 16:02:12 +00:00
2017-09-12 12:21:32 +00:00
template <>
class Server<HTTP> : public ServerBase<HTTP> {
2017-05-19 16:02:12 +00:00
public:
2017-09-12 12:21:32 +00:00
Server() noexcept : ServerBase<HTTP>::ServerBase(80) {}
2017-05-19 16:02:12 +00:00
protected:
2017-09-12 12:21:32 +00:00
void accept() override {
auto session = std::make_shared<Session>(create_connection(*io_service));
acceptor->async_accept(*session->connection->socket, [this, session](const error_code &ec) {
auto lock = session->connection->handler_runner->continue_lock();
if(!lock)
return;
// Immediately start accepting a new connection (unless io_service has been stopped)
if(ec != asio::error::operation_aborted)
this->accept();
if(!ec) {
asio::ip::tcp::no_delay option(true);
error_code ec;
session->connection->socket->set_option(option, ec);
this->read_request_and_content(session);
2017-05-19 16:02:12 +00:00
}
2017-09-12 12:21:32 +00:00
else if(this->on_error)
this->on_error(session->request, ec);
2017-05-19 16:02:12 +00:00
});
}
};
2017-09-12 12:21:32 +00:00
} // namespace SimpleWeb