Sane C++ Libraries
C++ Platform Abstraction Libraries
Loading...
Searching...
No Matches
SC::HttpWebServer Struct Reference

Http web server helps statically serves files from a directory. More...

#include <HttpWebServer.h>

Public Member Functions

Result init (StringSpan directoryToServe)
 Initialize the web server on the given file system directory to serve.
 
Result stopAsync ()
 Release all resources allocated by this web server.
 
void serveFile (HttpRequest &request, HttpResponse &response)
 Serve the file requested by this Http Client on its channel Call this method in response to HttpServer::onRequest to serve a file.
 

Detailed Description

Http web server helps statically serves files from a directory.


It can be used in conjunction with SC::HttpServer, by calling SC::HttpWebServer::serveFile inside the SC::HttpServer::onRequest callback to statically serve files.

See also
SC::HttpServer
constexpr int NUM_CLIENTS = 16;
constexpr int REQUEST_SLICES = 2;
constexpr int CLIENT_REQUEST = 1024;
Buffer headersMemory;
SC_TEST_EXPECT(headersMemory.resize(NUM_CLIENTS * 8 * CLIENT_REQUEST));
Buffer requestsMemory;
SC_TEST_EXPECT(requestsMemory.resize(NUM_CLIENTS * CLIENT_REQUEST * 2));
HttpServerClient clients[NUM_CLIENTS];
GrowableBuffer<Buffer> headers = {headersMemory};
HttpServer::Memory serverMemory = {headers, clients};
AsyncBufferView buffers[NUM_CLIENTS * (REQUEST_SLICES + 2)]; // +2 to accomodate some slots for external bufs
AsyncReadableStream::Request readQueue[NUM_CLIENTS * REQUEST_SLICES];
AsyncWritableStream::Request writeQueue[NUM_CLIENTS * REQUEST_SLICES];
Span<char> requestsSpan = requestsMemory.toSpan();
for (size_t idx = 0; idx < NUM_CLIENTS; ++idx)
{
for (size_t slice = 0; slice < REQUEST_SLICES; ++slice)
{
Span<char> memory;
const size_t offset = idx * CLIENT_REQUEST + slice * CLIENT_REQUEST / REQUEST_SLICES;
SC_TEST_EXPECT(requestsSpan.sliceStartLength(offset, CLIENT_REQUEST / REQUEST_SLICES, memory));
buffers[idx * REQUEST_SLICES + slice] = memory;
buffers[idx * REQUEST_SLICES + slice].setReusable(true); // We want to recycle these buffers
}
}
HttpAsyncServer asyncServer;
HttpWebServer webServer;
// Creates an HttpServer that serves files from application root directory
SC_TEST_EXPECT(asyncServer.start(eventLoop, "127.0.0.1", 8090, serverMemory));
SC_TEST_EXPECT(webServer.init(report.applicationRootDirectory.view()));
asyncServer.setupStreamsMemory(readQueue, writeQueue, buffers);
asyncServer.httpServer.onRequest = [&](HttpRequest& req, HttpResponse& res) { webServer.serveFile(req, res); };

Member Function Documentation

◆ init()

Result SC::HttpWebServer::init ( StringSpan directoryToServe)

Initialize the web server on the given file system directory to serve.

◆ serveFile()

void SC::HttpWebServer::serveFile ( HttpRequest & request,
HttpResponse & response )

Serve the file requested by this Http Client on its channel Call this method in response to HttpServer::onRequest to serve a file.

◆ stopAsync()

Result SC::HttpWebServer::stopAsync ( )

Release all resources allocated by this web server.


The documentation for this struct was generated from the following file: