aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2021-11-18 21:14:01 +0100
committerStefan Boberg <[email protected]>2021-11-18 21:14:01 +0100
commit4339b4f6772ad543002044c002f807c7dcdf4879 (patch)
tree564d44209d6331cb2cb7d5ac9ef2fee1de181d2f
parentmerged from main (diff)
downloadzen-4339b4f6772ad543002044c002f807c7dcdf4879.tar.xz
zen-4339b4f6772ad543002044c002f807c7dcdf4879.zip
rpc: tactical checkin
-rw-r--r--zenhttp/httpserver.cpp18
-rw-r--r--zenhttp/include/zenhttp/httpserver.h34
-rw-r--r--zenserver/admin/admin.cpp15
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()