Program Listing for File IApiServer.h
↰ Return to documentation for file (axr.sdk/net/IApiServer.h
)
// Copyright (C) AcceleratXR, Inc. All rights reserved.
//
// Author: Jean-Philippe Steinmetz <info@acceleratxr.com>
#pragma once
#include "../Configuration.h"
#include "../Exception.h"
#include "IHttpBody.h"
#include "HttpContent.h"
#include <any>
#include <initializer_list>
#include <map>
#include <variant>
#include <vector>
#include <cpprest/asyncrt_utils.h>
namespace axr {
namespace sdk {
namespace net {
enum class HttpMethod
{
DELETE,
GET,
HEAD,
POST,
PUT,
UPGRADE
};
class IHttpRequest
{
public:
std::map<utility::string_t, utility::string_t> GetHeaders();
void SetHeaders(std::map<utility::string_t, utility::string_t> Value);
utility::string_t GetBody() const;
HttpMethod GetMethod() const;
utility::string_t GetPath() const;
};
class IHttpResponse
{
public:
};
typedef std::variant<std::monostate, utility::string_t, std::shared_ptr<Object>, pplx::task<void>, pplx::task<utility::string_t>, pplx::task<std::shared_ptr<Object>>> HandlerReturnType;
typedef std::function<HandlerReturnType(const IHttpRequest& Request, const IHttpResponse& Response)> RequestHandler;
class IApiServer
{
public:
virtual pplx::task<void> Listen(uint16_t Port) = 0;
virtual pplx::task<void> Stop() = 0;
virtual void Use(RequestHandler Handler) = 0;
virtual void Use(const utility::string_t& Method, const utility::string_t& Path, std::initializer_list<RequestHandler> Handlers) = 0;
virtual void Delete(utility::string_t Path, std::initializer_list<RequestHandler> Handlers) = 0;
virtual void Get(utility::string_t Path, std::initializer_list<RequestHandler> Handlers) = 0;
virtual void Head(utility::string_t Path, std::initializer_list<RequestHandler> Handlers) = 0;
virtual void Post(utility::string_t Path, std::initializer_list<RequestHandler> Handlers) = 0;
virtual void Put(utility::string_t Path, std::initializer_list<RequestHandler> Handlers) = 0;
virtual void Upgrade(utility::string_t Path, std::initializer_list<RequestHandler> Handlers) = 0;
};
} // namespace net
} // namespace sdk
} // namespace axr