SparrowBot/app/mmokobanmodule.cpp
2017-09-25 21:03:13 +02:00

81 lines
1.7 KiB
C++

#include "mmokobanmodule.h"
#include "message.h"
#include "user.h"
#include <QStringList>
#include <common/mapkoban.h>
#include <common/defines.h>
#include <serverlib/server.h>
#include <thread>
MMOkobanModule::MMOkobanModule() :
m_running(false),
m_mmokoban_server(nullptr)
{
}
bool MMOkobanModule::messageHandler(Message msg)
{
User* user = getUsers()->getFromNick(msg.nick);
if(user == nullptr || !user->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(MMOkobanModule::startUpdateLoop, m_mmokoban_server, &m_running);
}
void MMOkobanModule::startUpdateLoop(Server* server, bool *running)
{
while(*running)
server->update();
server->destroy();
}
void MMOkobanModule::stop()
{
m_running = false;
m_mmokoban_server = nullptr;
}