a few upgrades for the HttpServer example (#955)
This commit is contained in:
@@ -28,7 +28,7 @@ int main(int argc, char **argv) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
int port = 3000;
|
int port = 3000;
|
||||||
struct us_new_socket_context_options_t ssl_options = {};
|
struct us_socket_context_options_t ssl_options = {};
|
||||||
|
|
||||||
while ((option = optparse_long(&options, longopts, nullptr)) != -1) {
|
while ((option = optparse_long(&options, longopts, nullptr)) != -1) {
|
||||||
switch (option) {
|
switch (option) {
|
||||||
@@ -63,7 +63,7 @@ int main(int argc, char **argv) {
|
|||||||
AsyncFileStreamer asyncFileStreamer(root);
|
AsyncFileStreamer asyncFileStreamer(root);
|
||||||
|
|
||||||
/* Either serve over HTTP or HTTPS */
|
/* Either serve over HTTP or HTTPS */
|
||||||
struct us_new_socket_context_options_t empty_ssl_options = {};
|
struct us_socket_context_options_t empty_ssl_options = {};
|
||||||
if (memcmp(&ssl_options, &empty_ssl_options, sizeof(empty_ssl_options))) {
|
if (memcmp(&ssl_options, &empty_ssl_options, sizeof(empty_ssl_options))) {
|
||||||
/* HTTPS */
|
/* HTTPS */
|
||||||
uWS::SSLApp(ssl_options).get("/*", [&asyncFileStreamer](auto *res, auto *req) {
|
uWS::SSLApp(ssl_options).get("/*", [&asyncFileStreamer](auto *res, auto *req) {
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ public:
|
|||||||
|
|
||||||
// get loop for thread
|
// get loop for thread
|
||||||
|
|
||||||
loop = uWS::Loop::defaultLoop();
|
loop = uWS::Loop::get();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Returns any data already cached for this offset */
|
/* Returns any data already cached for this offset */
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#include <experimental/filesystem>
|
#include <filesystem>
|
||||||
|
|
||||||
struct AsyncFileStreamer {
|
struct AsyncFileStreamer {
|
||||||
|
|
||||||
@@ -12,7 +12,7 @@ struct AsyncFileStreamer {
|
|||||||
|
|
||||||
void updateRootCache() {
|
void updateRootCache() {
|
||||||
// todo: if the root folder changes, we want to reload the cache
|
// todo: if the root folder changes, we want to reload the cache
|
||||||
for(auto &p : std::experimental::filesystem::recursive_directory_iterator(root)) {
|
for(auto &p : std::filesystem::recursive_directory_iterator(root)) {
|
||||||
std::string url = p.path().string().substr(root.length());
|
std::string url = p.path().string().substr(root.length());
|
||||||
if (url == "/index.html") {
|
if (url == "/index.html") {
|
||||||
url = "/";
|
url = "/";
|
||||||
@@ -38,7 +38,7 @@ struct AsyncFileStreamer {
|
|||||||
static void streamFile(uWS::HttpResponse<SSL> *res, AsyncFileReader *asyncFileReader) {
|
static void streamFile(uWS::HttpResponse<SSL> *res, AsyncFileReader *asyncFileReader) {
|
||||||
/* Peek from cache */
|
/* Peek from cache */
|
||||||
std::string_view chunk = asyncFileReader->peek(res->getWriteOffset());
|
std::string_view chunk = asyncFileReader->peek(res->getWriteOffset());
|
||||||
if (!chunk.length() || res->tryEnd(chunk, asyncFileReader->getFileSize())) {
|
if (!chunk.length() || res->tryEnd(chunk, asyncFileReader->getFileSize()).first) {
|
||||||
/* Request new chunk */
|
/* Request new chunk */
|
||||||
// todo: we need to abort this callback if peer closed!
|
// todo: we need to abort this callback if peer closed!
|
||||||
// this also means Loop::defer needs to support aborting (functions should embedd an atomic boolean abort or something)
|
// this also means Loop::defer needs to support aborting (functions should embedd an atomic boolean abort or something)
|
||||||
|
|||||||
Reference in New Issue
Block a user