Skip to content

wsjcpp/wsjcpp-light-web-server

Folders and files

NameName
Last commit message
Last commit date
Feb 17, 2020
Apr 3, 2020
Apr 5, 2020
Feb 20, 2020
Apr 5, 2020
Apr 21, 2020
Apr 5, 2020
Feb 20, 2020
Apr 3, 2020
Feb 19, 2020
Apr 3, 2020
Feb 17, 2020
Apr 5, 2020
Feb 17, 2020
Apr 21, 2020

Repository files navigation

wsjcpp-light-web-server

Build Status Github Stars Github Stars Github Forks

Integrate to your project

Include this files:

  • src.wsjcpp/wsjcpp_core/wsjcpp_core.h
  • src.wsjcpp/wsjcpp_core/wsjcpp_core.cpp
  • src.wsjcpp/nlohmann_json/json.hpp
  • src/wsjcpp_light_web_http_request.h
  • src/wsjcpp_light_web_http_request.cpp
  • src/wsjcpp_light_web_http_response.h
  • src/wsjcpp_light_web_http_response.cpp
  • src/wsjcpp_light_web_http_handler_rewrite_folder.h
  • src/wsjcpp_light_web_http_handler_rewrite_folder.cpp
  • src/wsjcpp_light_web_http_handler_web_folder.h
  • src/wsjcpp_light_web_http_handler_web_folder.cpp
  • src/wsjcpp_light_web_server.h
  • src/wsjcpp_light_web_server.cpp

Integrate via wsjcpp

$ wsjcpp install https://github.com/wsjcpp/wsjcpp-light-web-server:master

Fast generate handler:

$ wsjcpp generate WsjcppLightWebHttpHandler SomePage

So will be generated sample class 'LightWebHttpHandlerSomePage' with TODO

Examples

Example for simular rewrute_rules

Simpular apache:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.html

Contains base handler:

WsjcppLightWebHttpHandlerRewriteFolder(sPrefixPath, sDirPath)

Where

Specific: if file will be not found in web folder so will be returned file index.html

Will be good for single-web-app (like angular)

Example init, add handler and start server

#include <wsjcpp_light_web_http_handler_rewrite_folder.h>

... 
WsjcppLightWebServer httpServer;
httpServer.setPort(1234);
httpServer.setMaxWorkers(1);
httpServer.addHandler((WsjcppLightWebHttpHandlerBase *)new WsjcppLightWebHttpHandlerRewriteFolder("/app1/", "./web"));
httpServer.startSync(); // this method will be hold current thread, if you with you can call just start/stop command

After compile and start will be available on http://localhost:1234/app1/

Example simple web folder

Contains base handler:

WsjcppLightWebHttpHandlerWebFolder(sPrefixPath, sDirPath)

Where

Specific: if file does not exists wil be returned 404 not found

Example init, add handler and start server

#include <wsjcpp_light_web_http_handler_web_folder.h>

... 
WsjcppLightWebServer httpServer;
httpServer.setPort(1234);
httpServer.setMaxWorkers(1);
httpServer.addHandler((WsjcppLightWebHttpHandlerBase *)new WsjcppLightWebHttpHandlerWebFolder("/app2/", "./web"));
httpServer.startSync(); // this method will be hold current thread, if you with you can call just start/stop command

After compile and start will be available on http://localhost:1234/app2/

Example custom handler

Define class:

header-file http_handler_custom.h:

#ifndef HTTP_HANDLER_CUSTOM_H
#define HTTP_HANDLER_CUSTOM_H

#include <wsjcpp_light_web_server.h>

class HttpHandlerCustom : WsjcppLightWebHttpHandlerBase {
    public:
        HttpHandlerCustom();
        virtual bool canHandle(const std::string &sWorkerId, WsjcppLightWebHttpRequest *pRequest);
        virtual bool handle(const std::string &sWorkerId, WsjcppLightWebHttpRequest *pRequest);

    private:
        std::string TAG;
};
#endif // HTTP_HANDLER_CUSTOM_H

source-file http_handler_custom.cpp:

#include <wsjcpp_core.h>
#include "http_handler_custom.h"

// ----------------------------------------------------------------------

HttpHandlerCustom::HttpHandlerCustom()
: WsjcppLightWebHttpHandlerBase("custom") {
    TAG = "HttpHandlerCustom";
}

// ----------------------------------------------------------------------

bool HttpHandlerCustom::canHandle(const std::string &sWorkerId, WsjcppLightWebHttpRequest *pRequest) {
    std::string _tag = TAG + "-" + sWorkerId;
    std::string sRequestPath = pRequest->getRequestPath();

    if (sRequestPath == "/custom/" || sRequestPath == "/custom") {
        return true;    
    }
    if (sRequestPath == "/custom1/" || sRequestPath == "/custom1") {
        return true;    
    }
    return false;
}

// ----------------------------------------------------------------------

bool HttpHandlerCustom::handle(const std::string &sWorkerId, WsjcppLightWebHttpRequest *pRequest) {
    std::string _tag = TAG + "-" + sWorkerId;
    std::string sRequestPath = pRequest->getRequestPath();
    // WsjcppLog::warn(_tag, sRequestPath);
    
    WsjcppLightWebHttpResponse resp(pRequest->getSockFd());
    if (sRequestPath == "/custom" || sRequestPath == "/custom/") {
        resp.cacheSec(60).ok().sendText(
            "<h1>This is custom</h1>"
        );
    } else if (sRequestPath == "/custom1" || sRequestPath == "/custom1/") {
        resp.cacheSec(60).ok().sendText(
            "<h1>But this is custom1</h1>"
        );
    } else {
        resp.noCache().ok().sendText(
            "<h1>Unknown</h1>"
        );
    }
    return true;
}

Example init, add handler and start server order is important! Server will call canHandle & handle in same order as addHandler called

WsjcppLightWebServer httpServer;
httpServer.setPort(1234);
httpServer.setMaxWorkers(1);
httpServer.addHandler((WsjcppLightWebHttpHandlerBase *)new HttpHandlerCustom());
httpServer.addHandler((WsjcppLightWebHttpHandlerBase *)new WsjcppLightWebHttpHandlerRewriteFolder("/", "./web"));
httpServer.startSync(); // this method will be hold current thread, if you with you can call just start/stop command