summaryrefslogtreecommitdiffstats
path: root/crsm.hpp
diff options
context:
space:
mode:
authorMarkus Mittendrein <git@maxmitti.tk>2015-01-04 13:57:11 +0100
committerMarkus Mittendrein <git@maxmitti.tk>2015-01-04 13:57:11 +0100
commitfbe3c5fbe1327fd81e2eb8fe30a75c4cf5d7b35c (patch)
tree02c7bd3f23e18ffcd2d75257ab215e87ead72c96 /crsm.hpp
parenta92aea252411f86657081587633a88083a3b14a9 (diff)
downloadmanager-fbe3c5fbe1327fd81e2eb8fe30a75c4cf5d7b35c.tar.gz
manager-fbe3c5fbe1327fd81e2eb8fe30a75c4cf5d7b35c.zip
Cleanup completed. New Interface based system.
Diffstat (limited to 'crsm.hpp')
-rw-r--r--crsm.hpp179
1 files changed, 179 insertions, 0 deletions
diff --git a/crsm.hpp b/crsm.hpp
new file mode 100644
index 0000000..de90241
--- /dev/null
+++ b/crsm.hpp
@@ -0,0 +1,179 @@
+#pragma once
+
+#include <QObject>
+#include <QProcess>
+#include <QTextStream>
+#include <QSocketNotifier>
+#include <QCoreApplication>
+#include <QTextCodec>
+#include <QMap>
+#include <QFile>
+#include <QDir>
+#include <QDebug>
+#include <QDirIterator>
+#include <Irc>
+#include <IrcConnection>
+#include <IrcCommand>
+#include <QSignalMapper>
+
+#include "CmdFunctionRef.hpp"
+
+#define CONFIG_FILE_NAME "CrServerManager.conf"
+#define CUR_SCEN_FILE_NAME "curscen.txt"
+#define LAST_SCEN_FILE_NAME "lastscen.txt"
+#define SCOREBOARD_FILE_NAME settings["ClonkDirectory"] + "scoreboard.html"
+
+#define IRC_CHECK_CALLBACK(name) void name(const ClientInfo& requester, int status, const ClientInfo& subject)
+#define IRC_CHECK_CALLBACK_IMPL(name) void CRSM::name(const ClientInfo& requester, int status, const ClientInfo& subject)
+
+#ifdef Q_OS_LINUX64
+#define C4GROUP_EXECUTABLE "c4group64"
+#else
+#define C4GROUP_EXECUTABLE "c4group"
+#endif
+
+class CRSM;
+typedef void (CRSM::*IrcCheckCallback)(const ClientInfo&, int, const ClientInfo&);
+
+class CRSM : public QObject
+{
+private:
+ enum IrcModOperations {
+ ModCheck,
+ ModInfo,
+ SkipScen,
+ ClearUserList,
+ SkipCurrentScen,
+ Autohost,
+ NoAutohost,
+ ModHelp,
+ Kill,
+ IO,
+ CheckOnly,
+ NewAlias,
+ AliasWishes,
+ IngameChat
+ };
+
+ enum RespondType {
+ Normal,
+ Notice,
+ Private,
+ PrivateNotice
+ };
+
+ Q_OBJECT
+public:
+ explicit CRSM(QObject *parent = 0);
+ ~CRSM();
+ void start();
+
+signals:
+
+private slots:
+ void readServerOutput();
+ void processError();
+ void readInput();
+ void nextScen();
+ void printAdditionalHelp();
+ void readLog();
+ void scenarioFinished();
+ void ircMessageReceived(IrcMessage* message);
+ void greet(QString pcName);
+
+private:
+ QProcess *serverprocess;
+ QStringList scenlist;
+ QStringList userlist;
+ QStringList args;
+ QStringList ircModChecks;
+ QStringList ircMods;
+ QMap<QString, QList<QPair<ClientInfo, IrcCheckCallback>>> ircStatusFifos;
+ QMap<QString, QList<QPair<CmdFunctionRef, QString>>> ircModFifos;
+ QMap<QString, QList<QPair<IrcModOperations, QString>>> ircModFifosOld;
+ QString aliasWishEditor = "";
+ QString currentAliasWish = "";
+ int current;
+ QTextStream *qout;
+ QTextStream *qin;
+ bool finish;
+ QMap<QString, QString> settings;
+ QMap<QString, QString> session;
+ QMap<QString, ClientInfo> clients;
+ QStringList greeted;
+ QMap<QString, QStringList> lists;
+ QMap<QString, QMap<QString, QString>> maps;
+ int clientcount;
+ IrcConnection *connection = 0;
+ bool autoHost = true;
+ QSignalMapper greetMapper;
+ ClientInfo sessionAdmin;
+ ClientInfo ircAdmin;
+ QFile *logfile;
+ QTextStream logstream;
+ QTextCodec *codec;
+ QStringList ircModIOList;
+ QString writtenToServer;
+ QMap<QString, CmdFunctionRef> cmds;
+
+ void startScen(QString, QStringList);
+ void readConfig();
+ void readScenarios();
+ QMap<QString, QString> defaultSettings();
+ void listC4Folders();
+ void cleanUp();
+ bool scenExists(QString filePath);
+ QString listScenarios(QString commandArgs);
+ QString printQueue();
+ void ircCheckModCmd(const QString &nick, CmdFunctionRef func, QString arg = "");
+ QString skipScen();
+ void skipCurrent();
+ void writeToServer(const QString& message);
+ void writeConfig();
+ QString addAliasWish(const QString& param);
+ void informModsAboutAliasWish();
+ void editAliasWishes();
+ void editAliasWishes(const QString &message);
+ void stopAliasWishEditing();
+ QString ircActivateIngameChat(bool activated = true);
+ QStringList listC4Folder(const QString &path);
+
+ void addCommand(const QString& name, CmdFunction func, int interfaces = Clonk | IRC, UserType userType = User, const QString& shortDescription = "", const QString &argList = "", const QString &longDescription = "");
+ bool cmdExists(const QString& name, ClientInterface interface);
+ bool cmd(const QString& name, const QString& args, const ClientInfo& client);
+ void rightsFailMessage(const ClientInfo& info, UserType minUserType);
+ UserType clientUserType(const ClientInfo& client);
+
+ void setupCmds();
+
+ void respond(const ClientInfo& client, const QString& message, const RespondType type = Normal);
+ void ircCheckUserStatus(const ClientInfo& requester, const ClientInfo& subject, IrcCheckCallback callback);
+ void setIngameAdmin(const ClientInfo &client, const QString& newAdmin);
+
+ CMD_FUNCTION(help);
+ CMD_FUNCTION(passToClonk);
+ CMD_FUNCTION(admin);
+ CMD_FUNCTION(host);
+ CMD_FUNCTION(list);
+ CMD_FUNCTION(queue);
+ CMD_FUNCTION(aliaswish);
+ CMD_FUNCTION(ircchat);
+ CMD_FUNCTION(autohost);
+ CMD_FUNCTION(skip);
+ CMD_FUNCTION(next);
+ CMD_FUNCTION(kill);
+ CMD_FUNCTION(clear);
+ CMD_FUNCTION(aliaswishes);
+ CMD_FUNCTION(newalias);
+ CMD_FUNCTION(modinfo);
+ CMD_FUNCTION(io);
+ CMD_FUNCTION(pcNamePassToClonk);
+ CMD_FUNCTION(ingameadmin);
+ CMD_FUNCTION(ircadmin);
+ CMD_FUNCTION(noadmin);
+ CMD_FUNCTION(clientlist);
+
+ IRC_CHECK_CALLBACK(ircSetAdmin);
+ IRC_CHECK_CALLBACK(ircModCmd);
+};
+