diff --git a/http_examples.cpp b/http_examples.cpp index 3a8fbf9..2928707 100644 --- a/http_examples.cpp +++ b/http_examples.cpp @@ -22,9 +22,6 @@ using namespace boost::property_tree; typedef SimpleWeb::Server HttpServer; typedef SimpleWeb::Client HttpClient; -//Added for the default_resource example -void default_resource_send(const shared_ptr &response, const shared_ptr &ifs); - int main() { //HTTP-server at port 8080 using 1 thread //Unless you do more heavy non-threaded processing in the resources, @@ -126,7 +123,7 @@ int main() { }; //Get example simulating heavy work in a separate thread - server->resource["^/work$"]["GET"] = [](shared_ptr response, shared_ptr /*request*/) { + server->resource["^/work$"]["GET"] = [](shared_ptr response, shared_ptr /*request*/) { thread work_thread([response] { this_thread::sleep_for(chrono::seconds(5)); response->write("Work done"); @@ -183,7 +180,27 @@ int main() { header.emplace("Content-Length", to_string(length)); response->write(header); - default_resource_send(response, ifs); + + class FileServer { + public: + static void read_and_send(const shared_ptr &response, const shared_ptr &ifs) { + //read and send 128 KB at a time + static vector buffer(131072); // Safe when server is running on one thread + streamsize read_length; + if((read_length = ifs->read(&buffer[0], buffer.size()).gcount()) > 0) { + response->write(&buffer[0], read_length); + if(read_length == static_cast(buffer.size())) { + response->send([response, ifs](const SimpleWeb::error_code &ec) { + if(!ec) + read_and_send(response, ifs); + else + cerr << "Connection interrupted" << endl; + }); + } + } + } + }; + FileServer::read_and_send(response, ifs); } else throw invalid_argument("could not read file"); @@ -193,7 +210,7 @@ int main() { } }; - server->on_error = [](shared_ptr /*request*/, const SimpleWeb::error_code /*ec*/) { + server->on_error = [](shared_ptr /*request*/, const SimpleWeb::error_code /*ec*/) { // handle errors here }; @@ -226,20 +243,3 @@ int main() { server_thread.join(); } - -void default_resource_send(const shared_ptr &response, const shared_ptr &ifs) { - //read and send 128 KB at a time - static vector buffer(131072); // Safe when server is running on one thread - streamsize read_length; - if((read_length = ifs->read(&buffer[0], buffer.size()).gcount()) > 0) { - response->write(&buffer[0], read_length); - if(read_length == static_cast(buffer.size())) { - response->send([response, ifs](const SimpleWeb::error_code &ec) { - if(!ec) - default_resource_send(response, ifs); - else - cerr << "Connection interrupted" << endl; - }); - } - } -} diff --git a/https_examples.cpp b/https_examples.cpp index e785401..b1237c0 100644 --- a/https_examples.cpp +++ b/https_examples.cpp @@ -20,9 +20,6 @@ using namespace boost::property_tree; typedef SimpleWeb::Server HttpsServer; typedef SimpleWeb::Client HttpsClient; -//Added for the default_resource example -void default_resource_send(const shared_ptr &response, const shared_ptr &ifs); - int main() { //HTTPS-server at port 8080 using 1 thread //Unless you do more heavy non-threaded processing in the resources, @@ -181,7 +178,27 @@ int main() { header.emplace("Content-Length", to_string(length)); response->write(header); - default_resource_send(response, ifs); + + class FileServer { + public: + static void read_and_send(const shared_ptr &response, const shared_ptr &ifs) { + //read and send 128 KB at a time + static vector buffer(131072); // Safe when server is running on one thread + streamsize read_length; + if((read_length = ifs->read(&buffer[0], buffer.size()).gcount()) > 0) { + response->write(&buffer[0], read_length); + if(read_length == static_cast(buffer.size())) { + response->send([response, ifs](const SimpleWeb::error_code &ec) { + if(!ec) + read_and_send(response, ifs); + else + cerr << "Connection interrupted" << endl; + }); + } + } + } + }; + FileServer::read_and_send(response, ifs); } else throw invalid_argument("could not read file"); @@ -225,20 +242,3 @@ int main() { server_thread.join(); } - -void default_resource_send(const shared_ptr &response, const shared_ptr &ifs) { - //read and send 128 KB at a time - static vector buffer(131072); // Safe when server is running on one thread - streamsize read_length; - if((read_length = ifs->read(&buffer[0], buffer.size()).gcount()) > 0) { - response->write(&buffer[0], read_length); - if(read_length == static_cast(buffer.size())) { - response->send([response, ifs](const SimpleWeb::error_code &ec) { - if(!ec) - default_resource_send(response, ifs); - else - cerr << "Connection interrupted" << endl; - }); - } - } -}