#include <iostream>
#include <string>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <boost/lexical_cast.hpp>
#include "server.hpp"
#if defined(_WIN32)
boost:: function0< void > console_ctrl_function;
BOOL WINAPI console_ctrl_handler ( DWORD ctrl_type)
{
switch ( ctrl_type)
{
case CTRL_C_EVENT:
case CTRL_BREAK_EVENT:
case CTRL_CLOSE_EVENT:
case CTRL_SHUTDOWN_EVENT:
console_ctrl_function ( ) ;
return TRUE;
default :
return FALSE;
}
}
int main ( int argc, char * argv[ ] )
{
try
{
if ( argc != 5 )
{
std:: cerr << "Usage: http_server <address> <port> <threads> <doc_root>\n" ;
std:: cerr << " For IPv4, try:\n" ;
std:: cerr << " http_server 0.0.0.0 80 1 .\n" ;
std:: cerr << " For IPv6, try:\n" ;
std:: cerr << " http_server 0::0 80 1 .\n" ;
return 1 ;
}
std:: size_t num_threads = boost:: lexical_cast< std:: size_t> ( argv[ 3 ] ) ;
http:: server2:: server s ( argv[ 1 ] , argv[ 2 ] , argv[ 4 ] , num_threads) ;
console_ctrl_function = boost:: bind ( & http:: server2:: server:: stop, & s) ;
SetConsoleCtrlHandler ( console_ctrl_handler, TRUE) ;
s. run ( ) ;
}
catch ( std:: exception& e)
{
std:: cerr << "exception: " << e. what ( ) << "\n" ;
}
return 0 ;
}
#endif