diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Handler.cpp | 14 | ||||
-rw-r--r-- | src/SimpleHandlers.cpp | 2 | ||||
-rw-r--r-- | src/main.cpp | 47 |
3 files changed, 31 insertions, 32 deletions
diff --git a/src/Handler.cpp b/src/Handler.cpp index b5ed9f0..a26ee8a 100644 --- a/src/Handler.cpp +++ b/src/Handler.cpp @@ -15,18 +15,10 @@ std::vector<std::string> Handler::tokenizeArguments(const std::string &arguments return tokens; } -Handler::CommandHandler::CommandHandler(Handler::CommandHandler &&o) noexcept { - // this is a copy constructor, disguised as a move constructor.. I am sorry - command = o.command; - func = o.func; - description = o.description; // this is the main problem, any "moved" object will point to the same description TODO: maybe smart pointer can help? - payload = o.payload; -} - Handler::json Handler::CommandHandler::exec(const std::string &arguments, const std::string &session) const { return func(arguments, session, payload); } -Handler::CommandHandler::CommandHandler(std::string command, Handler::handler_function func, - std::vector<json> *description, void *payload) - : command{std::move(command)}, func{std::move(func)}, description{description}, payload{payload} {} +Handler::CommandHandler::CommandHandler(std::string command, Handler::handler_function func, description_function desc, + void *payload) + : command{std::move(command)}, func{std::move(func)}, get_description{std::move(desc)}, payload{payload} {} diff --git a/src/SimpleHandlers.cpp b/src/SimpleHandlers.cpp index 5b68125..e4ce4ac 100644 --- a/src/SimpleHandlers.cpp +++ b/src/SimpleHandlers.cpp @@ -38,7 +38,7 @@ Handler::json Handler::helpHandler(std::string const &arguments, std::string con std::vector<json> commandAnnotations; commandAnnotations.emplace_back( - create_annotation(Reply::AnnotationType::command, std::move(*itor.description))); + create_annotation(Reply::AnnotationType::command, std::move(itor.get_description()))); reply_vec.emplace_back(create_text("- ")); reply_vec.emplace_back(create_text(itor.command, std::move(commandAnnotations))); diff --git a/src/main.cpp b/src/main.cpp index fd1be31..8a8e4ba 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -12,39 +12,49 @@ #include "GetEssen.hpp" #include "SimpleHandlers.hpp" #include "RelationshipHandler.hpp" + /* END Handlers */ int main() { crow::SimpleApp app; - auto createPlainDescriptionFromText = [](std::string const &text) -> std::vector<crow::json::wvalue> * { - auto reply_vector = new std::vector<crow::json::wvalue>; - reply_vector->emplace_back(Response::create_text(text)); + auto createPlainDescriptionFromText = [](std::string const &text) -> std::vector<crow::json::wvalue> { + std::vector<crow::json::wvalue> reply_vector; + reply_vector.emplace_back(Response::create_text(text)); return reply_vector; }; // command --> handler std::vector<Handler::CommandHandler> commands; commands.emplace_back( - Handler::CommandHandler{"wiki", Handler::wikiHandler, createPlainDescriptionFromText( - "Sends you to Wikipedia!")}); + Handler::CommandHandler{"wiki", Handler::wikiHandler, [createPlainDescriptionFromText]() { + return createPlainDescriptionFromText("Sends you to Wikipedia!"); + }}); commands.emplace_back( - Handler::CommandHandler{"stop", Handler::stopHandler, createPlainDescriptionFromText( - "Stops the bot"), &app}); + Handler::CommandHandler{"stop", Handler::stopHandler, [createPlainDescriptionFromText]() { + return createPlainDescriptionFromText("Stops the bot"); + }, &app}); commands.emplace_back( - Handler::CommandHandler{"mensa", Handler::mensaHandler, createPlainDescriptionFromText( - "{adlershof, nord, sued} Shows the daily menu of the mensa at various places.")}); + Handler::CommandHandler{"mensa", Handler::mensaHandler, [createPlainDescriptionFromText]() { + return createPlainDescriptionFromText( + "{adlershof, nord, sued} Shows the daily menu of the mensa at various places."); + }}); commands.emplace_back( - Handler::CommandHandler{"klinger", Handler::klingerHandler, createPlainDescriptionFromText( - "Greats in french. Bonjour!")}); + Handler::CommandHandler{"klinger", Handler::klingerHandler, [createPlainDescriptionFromText]() { + return createPlainDescriptionFromText("Greats in french. Bonjour!"); + }}); commands.emplace_back( - Handler::CommandHandler{"say", Handler::sayHandler, createPlainDescriptionFromText( - "Say something!")}); + Handler::CommandHandler{"say", Handler::sayHandler, [createPlainDescriptionFromText]() { + return createPlainDescriptionFromText("Say something!"); + }}); commands.emplace_back( - Handler::CommandHandler{"relation", Handler::relationShipHandler, createPlainDescriptionFromText( - "[name1] [name2] Shows the result of an odd astrological religious pseudo-algorithm, based on the fact how much blessing a relationship receives by the glorious N.")}); - commands.emplace_back(Handler::CommandHandler{"help", Handler::helpHandler, createPlainDescriptionFromText( - "This is my holy manual."), &commands}); + Handler::CommandHandler{"relation", Handler::relationShipHandler, [createPlainDescriptionFromText]() { + return createPlainDescriptionFromText( + "[name1] [name2] Shows the result of an odd astrological religious pseudo-algorithm, based on the fact how much blessing a relationship receives by the glorious N."); + }}); + commands.emplace_back(Handler::CommandHandler{"help", Handler::helpHandler, [createPlainDescriptionFromText]() { + return createPlainDescriptionFromText("This is my holy manual."); + }, &commands}); CROW_ROUTE(app, "/") .methods("POST"_method) @@ -78,8 +88,5 @@ int main() { app.port(18080).multithreaded().run(); - for (auto &&it : commands) - delete it.description; - std::cout << "Stopped successfully" << std::endl; } |