1 #include <boost/bind.hpp>
3 #include <theodwalha/server.hpp>
4 #include <theodwalha/configuration.hpp>
6 http_server::http_server(boost::asio::io_service
& io_service
, std::string
const & temporary_file_directory
):
8 io_service(io_service
),
10 file_manager(temporary_file_directory
)
14 bool http_server::launch_server(ushort new_port
)
18 std::cout
<< "Server is already running" << std::endl
;
22 if(!file_manager
.initialise())
24 std::cout
<< "Failed to initialise temporary file manager" << std::endl
;
28 if(!modules
.load_modules(module_directory
))
31 boost::system::error_code error
;
32 boost::asio::ip::tcp::endpoint
endpoint(boost::asio::ip::tcp::v4(), new_port
);
33 acceptor
.open(endpoint
.protocol());
34 acceptor
.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));
35 acceptor
.bind(endpoint
, error
);
36 acceptor
.listen(backlog
);
46 std::cout
<< "Failed to bind acceptor on port " << new_port
<< ": " << error
<< std::endl
;
51 void http_server::accept()
53 http_server_client
* new_client
= new http_server_client(io_service
, file_manager
, modules
);
54 acceptor
.async_accept(new_client
->socket
, boost::bind(&http_server::accept_event
, this, boost::asio::placeholders::error
, new_client
));
57 void http_server::accept_event(boost::system::error_code
const & error
, http_server_client
* new_client
)
61 boost::asio::ip::tcp::endpoint endpoint
= new_client
->socket
.remote_endpoint();
63 std::cout
<< "New connection from " << endpoint
.address().to_string() << ":" << endpoint
.port() << std::endl
;
69 std::cout
<< "Accept error: " << error
<< std::endl
;