Class representing a HTTP Server.
#include <iostream>
#include <string>
class HTTPServerObserver :
public Observer<HTTPServer>,
public Observer<HTTPSession>,
public std::enable_shared_from_this<HTTPServerObserver>
{
public:
void update(HTTPServer::SPtr serv){
std::cout << "Connected... " << serv->getSession()->getClientIP() << ":" << serv->getSession()->getClientPort() << std::endl;
serv->getSession()->subscribe(this->shared_from_this());
}
void update(HTTPSession::SPtr sess){
std::cout << "Server session requested: " << sess->getRequest().target() << std::endl;
if(sess->getRequest().target() == "/sayhi") {
http::response<http::vector_body<char>> myCustomResult;
Blob data;
data.loadString("Hello World :)");
myCustomResult = {http::status::ok, sess->getRequest().version()};
myCustomResult.set(http::field::server, sess->getServerString());
myCustomResult.set(http::field::content_type, "text/html");
myCustomResult.keep_alive(sess->getRequest().keep_alive());
myCustomResult.body().assign(data.begin(), data.end());
myCustomResult.prepare_payload();
sess->setResult(myCustomResult);
}
}
using SPtr = std::shared_ptr<HTTPServerObserver>;
using UPtr = std::unique_ptr<HTTPServerObserver>;
using WPtr = std::weak_ptr<HTTPServerObserver>;
};
int main()
{
HTTPServer::SPtr sptr = std::make_shared<HTTPServer>("0.0.0.0", "8808", "/home/giri");
HTTPServerObserver::SPtr obs = std::make_shared<HTTPServerObserver>();
sptr->subscribe(obs);
sptr->run();
while(true){};
return EXIT_SUCCESS;
}
Binary large object implementation using std::vector<char>.
Simple HTTP Server implementation.
Namespace for giri's C++ support library.
Definition: Base64.h:47