From 831b76c77f9d0314a79f6a97cb0a961b1370fbc2 Mon Sep 17 00:00:00 2001 From: Anselme Date: Mon, 25 Sep 2017 18:06:16 +0200 Subject: [PATCH] added mmokobanmodule --- .qmake.conf | 1 + app/app.pro | 7 ++-- app/mmokobanmodule.cpp | 78 ++++++++++++++++++++++++++++++++++++++++++ app/mmokobanmodule.h | 25 ++++++++++++++ 4 files changed, 109 insertions(+), 2 deletions(-) create mode 100644 app/mmokobanmodule.cpp create mode 100644 app/mmokobanmodule.h diff --git a/.qmake.conf b/.qmake.conf index 4b61356..ed08833 100644 --- a/.qmake.conf +++ b/.qmake.conf @@ -2,3 +2,4 @@ bin_dir=$$PWD/bin lib_dir=$$PWD/lib mmokoban_lib_dir=$$PWD/../mmokoban/lib include_dir=$$PWD/../mmokoban/src +include_dir=$$PWD/../mmokoban/include diff --git a/app/app.pro b/app/app.pro index 053d6e7..0c6ec86 100644 --- a/app/app.pro +++ b/app/app.pro @@ -31,6 +31,7 @@ unix { INCLUDEPATH += ../ircbot INCLUDEPATH += $$include_dir +INCLUDEPATH += $$sfml_dir SOURCES = main.cpp \ regismodule.cpp \ @@ -43,7 +44,8 @@ SOURCES = main.cpp \ jankenmodule.cpp \ janken.cpp \ rpgmodule.cpp \ - punishermodule.cpp + punishermodule.cpp \ + mmokobanmodule.cpp HEADERS += \ regismodule.h \ @@ -56,4 +58,5 @@ HEADERS += \ jankenmodule.h \ janken.h \ rpgmodule.h \ - punishermodule.h + punishermodule.h \ + mmokobanmodule.h diff --git a/app/mmokobanmodule.cpp b/app/mmokobanmodule.cpp new file mode 100644 index 0000000..28029a2 --- /dev/null +++ b/app/mmokobanmodule.cpp @@ -0,0 +1,78 @@ +#include "mmokobanmodule.h" +#include "message.h" +#include "user.h" +#include + +#include +#include +#include + +#include + +MMOkobanModule::MMOkobanModule() : + m_running(false), + m_mmokoban_server(nullptr) +{ +} + +bool MMOkobanModule::messageHandler(Message msg) +{ + if(!getUsers()->getFromNick(msg.nick)->isOp()) + return false; + + if(msg.args.startsWith("!mmokoban")) + { + if(msg.args.compare("!mmokoban start") == 0) + { + if(m_running) + answer = say("MMOkoban server is already running."); + else + { + start(); + answer = say("MMOkoban server starting..."); + } + return true; + } + else if(msg.args.compare("!mmokoban stop") == 0) + { + if(!m_running) + answer = say("MMOkoban server is already stopped."); + else + { + stop(); + answer = say("MMOkoban server stopping..."); + } + return true; + } + } + return false; +} + +QString MMOkobanModule::getName() +{ + return "mmokoban"; +} + +void MMOkobanModule::start() +{ + m_running = true; + + // launching server + m_mmokoban_server = new Server(TCP_PORT); + m_mmokoban_server->initMap(); + + new std::thread(startUpdateLoop, m_mmokoban_server, m_running); +} + +void MMOkobanModule::startUpdateLoop(Server* server, bool &running) +{ + while(running) + server->update(); + delete server; +} + +void MMOkobanModule::stop() +{ + m_running = false; + m_mmokoban_server = nullptr; +} diff --git a/app/mmokobanmodule.h b/app/mmokobanmodule.h new file mode 100644 index 0000000..9eafbff --- /dev/null +++ b/app/mmokobanmodule.h @@ -0,0 +1,25 @@ +#ifndef MMOKOBANMODULE_H +#define MMOKOBANMODULE_H + +#include + +class Server; + +class MMOkobanModule : public Module +{ + bool m_running; + Server* m_mmokoban_server; + + void start(); + void stop(); + + static void startUpdateLoop(Server* server, bool &running); + +public: + MMOkobanModule(); + + bool messageHandler(Message msg); + QString getName(); +}; + +#endif // MMOKOBANMODULE_H