Skip to content

Implementation of a HTTP module

fxnabes edited this page Mar 1, 2019 · 3 revisions

HelloWorldModule.hpp

#pragma once

#include "zia/api/IHttpModule.hpp"
#include "zia/api/IModuleDescriptor.hpp"

class HelloWorldModule : public zia::api::IHttpModule {
public:
    HelloWorldModule() = default;

    void loadConfiguration(
            std::unordered_map<std::string, std::string> const &config) override;

    zia::api::HookResult onRequest(zia::http::IRequest &request,
                                   zia::http::IResponse &response) override;

    zia::api::HookResult onProcess(zia::http::IRequest &request,
                                   zia::http::IResponse &response) override;

    zia::api::HookResult onResponse(zia::http::IRequest &request,
                                    zia::http::IResponse &response) override;
};

class HelloWorldModuleDescriptor : public zia::api::IModuleDescriptor {
public:
    HelloWorldModuleDescriptor() = default;

    zia::api::ModuleType getType() const override
    {
        return _type;
    }

    const std::string &getName() const override
    {
        return _name;
    }

    const std::vector<zia::api::ConfigKey> &getConfigKeys() const override
    {
        return _configKey;
    }

    std::unique_ptr<zia::api::IModule> create() override
    {
        return std::make_unique<HelloWorldModule>();
    }

private:
    static const zia::api::ModuleType _type = zia::api::ModuleType::Http;
    static const std::string _name;
    static const std::vector<zia::api::ConfigKey> _configKey;
};

HelloWorldModule.cpp

#include "HelloWorldModule.hpp"

void HelloWorldModule::loadConfiguration(
    std::unordered_map<std::string, std::string> const &)
{
    // If your module needs configuration
}

zia::api::HookResult HelloWorldModule::onRequest(zia::http::IRequest &,
                                                 zia::http::IResponse &)
{
    return zia::api::HookResult::Declined;
}

zia::api::HookResult HelloWorldModule::onProcess(zia::http::IRequest &,
                                                 zia::http::IResponse &response)
{
    zia::http::Buffer buff("Hello world");

    response.setBody(buff);
    return zia::api::HookResult::Ok;
}

zia::api::HookResult HelloWorldModule::onResponse(
    zia::http::IRequest &, zia::http::IResponse &)
{
    //
    return zia::api::HookResult::Declined;
}

extern "C" {
HelloWorldModuleDescriptor descriptor;
}

const std::string HelloWorldModuleDescriptor::_name = std::string("HelloWorld");

const std::vector<zia::api::ConfigKey> HelloWorldModuleDescriptor::_configKey = {};

Clone this wiki locally