| | #pragma once
|
| |
|
| | #include <atomic>
|
| | #include <functional>
|
| | #include <map>
|
| | #include <string>
|
| | #include <thread>
|
| |
|
| | struct common_params;
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| | struct server_http_res {
|
| | std::string content_type = "application/json; charset=utf-8";
|
| | int status = 200;
|
| | std::string data;
|
| | std::map<std::string, std::string> headers;
|
| |
|
| |
|
| | std::function<bool(std::string &)> next = nullptr;
|
| | bool is_stream() const {
|
| | return next != nullptr;
|
| | }
|
| |
|
| | virtual ~server_http_res() = default;
|
| | };
|
| |
|
| |
|
| |
|
| | using server_http_res_ptr = std::unique_ptr<server_http_res>;
|
| |
|
| | struct server_http_req {
|
| | std::map<std::string, std::string> params;
|
| | std::map<std::string, std::string> headers;
|
| | std::string path;
|
| | std::string query_string;
|
| | std::string body;
|
| | const std::function<bool()> & should_stop;
|
| |
|
| | std::string get_param(const std::string & key, const std::string & def = "") const {
|
| | auto it = params.find(key);
|
| | if (it != params.end()) {
|
| | return it->second;
|
| | }
|
| | return def;
|
| | }
|
| | };
|
| |
|
| | struct server_http_context {
|
| | class Impl;
|
| | std::unique_ptr<Impl> pimpl;
|
| |
|
| | std::thread thread;
|
| | std::atomic<bool> is_ready = false;
|
| |
|
| | std::string path_prefix;
|
| | std::string hostname;
|
| | int port;
|
| |
|
| | server_http_context();
|
| | ~server_http_context();
|
| |
|
| | bool init(const common_params & params);
|
| | bool start();
|
| | void stop() const;
|
| |
|
| |
|
| | using handler_t = std::function<server_http_res_ptr(const server_http_req & req)>;
|
| |
|
| | void get(const std::string & path, const handler_t & handler) const;
|
| | void post(const std::string & path, const handler_t & handler) const;
|
| |
|
| |
|
| | std::string listening_address;
|
| | };
|
| |
|