Program Listing for File AbstractApiServer.h

Return to documentation for file (axr.sdk/net/AbstractApiServer.h)

// Copyright (C) AcceleratXR, Inc. All rights reserved.
//
// Author: Jean-Philippe Steinmetz <info@acceleratxr.com>
#pragma once

#include "../Configuration.h"
#include "./IApiServer.h"

namespace axr {
namespace sdk {
namespace net {

class AbstractApiServer : public IApiServer
{
protected:
    AbstractApiServer(std::shared_ptr<Configuration> Config);

public:
    virtual ~AbstractApiServer() {}

    virtual void Use(RequestHandler Handler);

    virtual void Use(const utility::string_t& Method, const utility::string_t& Path, std::initializer_list<RequestHandler> Handlers);

    virtual void Delete(const utility::string_t& Path, std::initializer_list<RequestHandler> Handlers);

    virtual void Get(const utility::string_t& Path, std::initializer_list<RequestHandler> Handlers);

    virtual void Head(const utility::string_t& Path, std::initializer_list<RequestHandler> Handlers);

    virtual void Post(const utility::string_t& Path, std::initializer_list<RequestHandler> Handlers);

    virtual void Put(const utility::string_t& Path, std::initializer_list<RequestHandler> Handlers);

    virtual void Upgrade(const utility::string_t& Path, std::initializer_list<RequestHandler> Handlers);

protected:
    void HandleRequest(IHttpRequest Request);

    std::shared_ptr<Configuration> m_Config;
    std::map<utility::string_t, std::vector<RequestHandler>> m_EndpointHandlers;
};

} // namespace net
} // namespace sdk
} // namespace axr