diff options
| author | Stefan Boberg <[email protected]> | 2021-11-18 21:14:01 +0100 |
|---|---|---|
| committer | Stefan Boberg <[email protected]> | 2021-11-18 21:14:01 +0100 |
| commit | 4339b4f6772ad543002044c002f807c7dcdf4879 (patch) | |
| tree | 564d44209d6331cb2cb7d5ac9ef2fee1de181d2f | |
| parent | merged from main (diff) | |
| download | zen-4339b4f6772ad543002044c002f807c7dcdf4879.tar.xz zen-4339b4f6772ad543002044c002f807c7dcdf4879.zip | |
rpc: tactical checkin
| -rw-r--r-- | zenhttp/httpserver.cpp | 18 | ||||
| -rw-r--r-- | zenhttp/include/zenhttp/httpserver.h | 34 | ||||
| -rw-r--r-- | zenserver/admin/admin.cpp | 15 |
3 files changed, 63 insertions, 4 deletions
diff --git a/zenhttp/httpserver.cpp b/zenhttp/httpserver.cpp index f40836c4a..011468715 100644 --- a/zenhttp/httpserver.cpp +++ b/zenhttp/httpserver.cpp @@ -565,6 +565,24 @@ HttpRequestRouter::HandleRequest(zen::HttpServerRequest& Request) ////////////////////////////////////////////////////////////////////////// +HttpRpcHandler::HttpRpcHandler() +{ +} + +HttpRpcHandler::~HttpRpcHandler() +{ +} + +void +HttpRpcHandler::AddRpc(std::string_view RpcId, std::function<void(CbObject& RpcArgs)> HandlerFunction) +{ + ZEN_UNUSED(RpcId, HandlerFunction); + + +} + +////////////////////////////////////////////////////////////////////////// + enum class HttpServerClass { kHttpAsio, diff --git a/zenhttp/include/zenhttp/httpserver.h b/zenhttp/include/zenhttp/httpserver.h index 93ba452c7..19b4c63d6 100644 --- a/zenhttp/include/zenhttp/httpserver.h +++ b/zenhttp/include/zenhttp/httpserver.h @@ -4,6 +4,7 @@ #include "zenhttp.h" +#include <zencore/compactbinary.h> #include <zencore/enumflags.h> #include <zencore/iobuffer.h> #include <zencore/iohash.h> @@ -15,6 +16,7 @@ #include <functional> #include <gsl/gsl-lite.hpp> #include <list> +#include <map> #include <regex> #include <span> #include <unordered_map> @@ -269,6 +271,38 @@ private: std::unordered_map<std::string, std::string> m_PatternMap; }; +/** HTTP RPC request helper + */ + +class RpcResult +{ + RpcResult(CbObject Result) : m_Result(std::move(Result)) {} + +private: + CbObject m_Result; +}; + +class HttpRpcHandler +{ +public: + HttpRpcHandler(); + ~HttpRpcHandler(); + + HttpRpcHandler(const HttpRpcHandler&) = delete; + HttpRpcHandler operator=(const HttpRpcHandler&) = delete; + + void AddRpc(std::string_view RpcId, std::function<void(CbObject& RpcArgs)> HandlerFunction); + +private: + struct RpcFunction + { + std::function<void(CbObject& RpcArgs)> Function; + std::string Identifier; + }; + + std::map<std::string, RpcFunction> m_Functions; +}; + void http_forcelink(); // internal } // namespace zen diff --git a/zenserver/admin/admin.cpp b/zenserver/admin/admin.cpp index 07211cbeb..2dd9b110f 100644 --- a/zenserver/admin/admin.cpp +++ b/zenserver/admin/admin.cpp @@ -11,18 +11,25 @@ namespace zen { HttpAdminService::HttpAdminService() { m_Router.RegisterRoute( - "hello", - [this](HttpRouterRequest& Req) { Req.ServerRequest().WriteResponse(HttpResponseCode::OK); }, + "health", + [this](HttpRouterRequest& Req) { + CbObjectWriter Obj; + Obj.AddBool("ok", true); + Req.ServerRequest().WriteResponse(HttpResponseCode::OK, Obj.Save()); + }, HttpVerb::kGet); + // RPC endpoint m_Router.RegisterRoute( - "health", + "", [this](HttpRouterRequest& Req) { + CbObject Payload = Req.ServerRequest().ReadPayloadObject(); + CbObjectWriter Obj; Obj.AddBool("ok", true); Req.ServerRequest().WriteResponse(HttpResponseCode::OK, Obj.Save()); }, - HttpVerb::kGet); + HttpVerb::kPost); } HttpAdminService::~HttpAdminService() |