From 031615ac866cc3c8f1900dd4b4aae2106ad31230 Mon Sep 17 00:00:00 2001 From: ipknHama Date: Thu, 7 Aug 2014 01:18:33 +0900 Subject: source resturcturing + CMake --- include/http_response.h | 86 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 include/http_response.h (limited to 'include/http_response.h') diff --git a/include/http_response.h b/include/http_response.h new file mode 100644 index 0000000..ae92543 --- /dev/null +++ b/include/http_response.h @@ -0,0 +1,86 @@ +#pragma once +#include +#include +#include "json.h" + +namespace crow +{ + template + class Connection; + struct response + { + template + friend class crow::Connection; + + std::string body; + json::wvalue json_value; + int code{200}; + std::unordered_map headers; + + response() {} + explicit response(int code) : code(code) {} + response(std::string body) : body(std::move(body)) {} + response(json::wvalue&& json_value) : json_value(std::move(json_value)) {} + response(const json::wvalue& json_value) : body(json::dump(json_value)) {} + response(int code, std::string body) : body(std::move(body)), code(code) {} + + response(response&& r) + { + *this = std::move(r); + } + + response& operator = (const response& r) = delete; + + response& operator = (response&& r) + { + body = std::move(r.body); + json_value = std::move(r.json_value); + code = r.code; + headers = std::move(r.headers); + completed_ = r.completed_; + return *this; + } + + void clear() + { + body.clear(); + json_value.clear(); + code = 200; + headers.clear(); + completed_ = false; + } + + void write(const std::string& body_part) + { + body += body_part; + } + + void end() + { + if (!completed_) + { + completed_ = true; + if (complete_request_handler_) + { + complete_request_handler_(); + } + } + } + + void end(const std::string& body_part) + { + body += body_part; + end(); + } + + bool is_alive() + { + return is_alive_helper_ && is_alive_helper_(); + } + + private: + bool completed_{}; + std::function complete_request_handler_; + std::function is_alive_helper_; + }; +} -- cgit v1.2.3-54-g00ecf