aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNiklas Halle <niklas@niklashalle.net>2020-08-23 14:55:31 +0200
committerNiklas Halle <niklas@niklashalle.net>2020-08-23 14:57:38 +0200
commit851882f9552b5a697fc1ed141f89f9f7caa7349a (patch)
treebd2bfc313488c4d16c825f7632d3e02645aa10fa
parent4fd77ac95998a9bff45e30a26f97e60159ad5e1d (diff)
downloadn_core-851882f9552b5a697fc1ed141f89f9f7caa7349a.tar.gz
n_core-851882f9552b5a697fc1ed141f89f9f7caa7349a.zip
prototype, not returning json yet
-rw-r--r--src/main.cpp63
1 files changed, 55 insertions, 8 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 57e4686..58d5791 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1,25 +1,72 @@
#include <iostream>
+#include <functional>
+#include <unordered_map>
#include "crow.h"
+#define NULL_STRING std::string("null")
+#define EMPTY_STRING std::string("")
+#define NO_SUCH_COMMAND std::string("no_such_command")
+
+typedef std::function<std::string(std::string const &arguments, std::string const &session,
+ void *payload)> handler_func;
+
+struct CommandHandler {
+ [[nodiscard]] std::string exec(std::string const &arguments, std::string const &session) const {
+ return func(arguments, session, payload);
+ }
+
+ handler_func func;
+ void *payload{nullptr};
+};
+
+std::string stopHandler(std::string const &arguments, std::string const &session, void *payload);
+std::string klingerHandler(std::string const &arguments, std::string const &session, void *payload);
+
+[[maybe_unused]] void decl_me_daddy(int not_an_int) { (void) not_an_int; }
+
int main() {
crow::SimpleApp app;
- CROW_ROUTE(app, "/add_json")
+ // command --> handler
+ static std::unordered_map<std::string, CommandHandler> const commands{
+ {"stop", {stopHandler, &app}},
+ {"klinger", {klingerHandler}}
+ };
+
+ CROW_ROUTE(app, "/")
.methods("POST"_method)
- ([](crow::request const &request) {
+ ([&app](crow::request const &request) {
auto data = crow::json::load(request.body);
+
if (!data)
return crow::response(400);
- auto sum = data["a"].i() + data["b"].i();
- std::ostringstream os;
- os << sum;
- return crow::response{os.str()};
+
+ std::string command = (data.count("command") ? data["command"].s() : NO_SUCH_COMMAND);
+ std::string arguments = (data.count("arguments") ? data["arguments"].s() : EMPTY_STRING);
+ std::string session = (data.count("session") ? data["session"].s() : NULL_STRING);
+
+ if (auto itor = commands.find(command); itor != commands.end()) {
+ auto handler = itor->second;
+ return crow::response{handler.exec(arguments, session)};
+ }
+
+ return crow::response{"no such command!\n"};
});
app.port(18080).multithreaded().run();
- std::cout << "Hello, World\n" << std::endl;
+ std::cout << "Stopped successfully" << std::endl;
+}
+
+std::string klingerHandler(std::string const &arguments, std::string const &session, void *payload) {
+ return "Bonjour!";
+}
+
+std::string stopHandler(std::string const &arguments, std::string const &session, void *payload) {
+ auto app = (crow::SimpleApp*) payload;
+ app->stop();
+ return "stopped";
}
-// curl -d '{"a":"5", "b":"12"}' -H "Content-Type: application/json" -X POST http://localhost:18080/add_json
+// curl -d '{"command":"klinger", "b":"12"}' -H "Content-Type: application/json" -X POST http://localhost:18080/