Simplified the default_resource example
This commit is contained in:
parent
78d68b063b
commit
88a8b154e5
2 changed files with 20 additions and 24 deletions
|
|
@ -21,7 +21,7 @@ typedef SimpleWeb::Client<SimpleWeb::HTTP> HttpClient;
|
||||||
|
|
||||||
//Added for the default_resource example
|
//Added for the default_resource example
|
||||||
void default_resource_send(const HttpServer &server, const shared_ptr<HttpServer::Response> &response,
|
void default_resource_send(const HttpServer &server, const shared_ptr<HttpServer::Response> &response,
|
||||||
const shared_ptr<ifstream> &ifs, const shared_ptr<vector<char> > &buffer);
|
const shared_ptr<ifstream> &ifs);
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
//HTTP-server at port 8080 using 1 thread
|
//HTTP-server at port 8080 using 1 thread
|
||||||
|
|
@ -121,17 +121,13 @@ int main() {
|
||||||
ifs->open(path.string(), ifstream::in | ios::binary);
|
ifs->open(path.string(), ifstream::in | ios::binary);
|
||||||
|
|
||||||
if(*ifs) {
|
if(*ifs) {
|
||||||
//read and send 128 KB at a time
|
|
||||||
streamsize buffer_size=131072;
|
|
||||||
auto buffer=make_shared<vector<char> >(buffer_size);
|
|
||||||
|
|
||||||
ifs->seekg(0, ios::end);
|
ifs->seekg(0, ios::end);
|
||||||
auto length=ifs->tellg();
|
auto length=ifs->tellg();
|
||||||
|
|
||||||
ifs->seekg(0, ios::beg);
|
ifs->seekg(0, ios::beg);
|
||||||
|
|
||||||
*response << "HTTP/1.1 200 OK\r\nContent-Length: " << length << "\r\n\r\n";
|
*response << "HTTP/1.1 200 OK\r\nContent-Length: " << length << "\r\n\r\n";
|
||||||
default_resource_send(server, response, ifs, buffer);
|
default_resource_send(server, response, ifs);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
throw invalid_argument("could not read file");
|
throw invalid_argument("could not read file");
|
||||||
|
|
@ -168,14 +164,16 @@ int main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void default_resource_send(const HttpServer &server, const shared_ptr<HttpServer::Response> &response,
|
void default_resource_send(const HttpServer &server, const shared_ptr<HttpServer::Response> &response,
|
||||||
const shared_ptr<ifstream> &ifs, const shared_ptr<vector<char> > &buffer) {
|
const shared_ptr<ifstream> &ifs) {
|
||||||
|
//read and send 128 KB at a time
|
||||||
|
static vector<char> buffer(131072); // Safe when server is running on one thread
|
||||||
streamsize read_length;
|
streamsize read_length;
|
||||||
if((read_length=ifs->read(&(*buffer)[0], buffer->size()).gcount())>0) {
|
if((read_length=ifs->read(&buffer[0], buffer.size()).gcount())>0) {
|
||||||
response->write(&(*buffer)[0], read_length);
|
response->write(&buffer[0], read_length);
|
||||||
if(read_length==static_cast<streamsize>(buffer->size())) {
|
if(read_length==static_cast<streamsize>(buffer.size())) {
|
||||||
server.send(response, [&server, response, ifs, buffer](const boost::system::error_code &ec) {
|
server.send(response, [&server, response, ifs](const boost::system::error_code &ec) {
|
||||||
if(!ec)
|
if(!ec)
|
||||||
default_resource_send(server, response, ifs, buffer);
|
default_resource_send(server, response, ifs);
|
||||||
else
|
else
|
||||||
cerr << "Connection interrupted" << endl;
|
cerr << "Connection interrupted" << endl;
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ typedef SimpleWeb::Client<SimpleWeb::HTTPS> HttpsClient;
|
||||||
|
|
||||||
//Added for the default_resource example
|
//Added for the default_resource example
|
||||||
void default_resource_send(const HttpsServer &server, const shared_ptr<HttpsServer::Response> &response,
|
void default_resource_send(const HttpsServer &server, const shared_ptr<HttpsServer::Response> &response,
|
||||||
const shared_ptr<ifstream> &ifs, const shared_ptr<vector<char> > &buffer);
|
const shared_ptr<ifstream> &ifs);
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
//HTTPS-server at port 8080 using 1 thread
|
//HTTPS-server at port 8080 using 1 thread
|
||||||
|
|
@ -121,17 +121,13 @@ int main() {
|
||||||
ifs->open(path.string(), ifstream::in | ios::binary);
|
ifs->open(path.string(), ifstream::in | ios::binary);
|
||||||
|
|
||||||
if(*ifs) {
|
if(*ifs) {
|
||||||
//read and send 128 KB at a time
|
|
||||||
streamsize buffer_size=131072;
|
|
||||||
auto buffer=make_shared<vector<char> >(buffer_size);
|
|
||||||
|
|
||||||
ifs->seekg(0, ios::end);
|
ifs->seekg(0, ios::end);
|
||||||
auto length=ifs->tellg();
|
auto length=ifs->tellg();
|
||||||
|
|
||||||
ifs->seekg(0, ios::beg);
|
ifs->seekg(0, ios::beg);
|
||||||
|
|
||||||
*response << "HTTP/1.1 200 OK\r\nContent-Length: " << length << "\r\n\r\n";
|
*response << "HTTP/1.1 200 OK\r\nContent-Length: " << length << "\r\n\r\n";
|
||||||
default_resource_send(server, response, ifs, buffer);
|
default_resource_send(server, response, ifs);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
throw invalid_argument("could not read file");
|
throw invalid_argument("could not read file");
|
||||||
|
|
@ -169,14 +165,16 @@ int main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void default_resource_send(const HttpsServer &server, const shared_ptr<HttpsServer::Response> &response,
|
void default_resource_send(const HttpsServer &server, const shared_ptr<HttpsServer::Response> &response,
|
||||||
const shared_ptr<ifstream> &ifs, const shared_ptr<vector<char> > &buffer) {
|
const shared_ptr<ifstream> &ifs) {
|
||||||
|
//read and send 128 KB at a time
|
||||||
|
static vector<char> buffer(131072); // Safe when server is running on one thread
|
||||||
streamsize read_length;
|
streamsize read_length;
|
||||||
if((read_length=ifs->read(&(*buffer)[0], buffer->size()).gcount())>0) {
|
if((read_length=ifs->read(&buffer[0], buffer.size()).gcount())>0) {
|
||||||
response->write(&(*buffer)[0], read_length);
|
response->write(&buffer[0], read_length);
|
||||||
if(read_length==static_cast<streamsize>(buffer->size())) {
|
if(read_length==static_cast<streamsize>(buffer.size())) {
|
||||||
server.send(response, [&server, response, ifs, buffer](const boost::system::error_code &ec) {
|
server.send(response, [&server, response, ifs](const boost::system::error_code &ec) {
|
||||||
if(!ec)
|
if(!ec)
|
||||||
default_resource_send(server, response, ifs, buffer);
|
default_resource_send(server, response, ifs);
|
||||||
else
|
else
|
||||||
cerr << "Connection interrupted" << endl;
|
cerr << "Connection interrupted" << endl;
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue