diff options
| author | Markus Mittendrein <git@maxmitti.tk> | 2015-01-04 13:57:11 +0100 |
|---|---|---|
| committer | Markus Mittendrein <git@maxmitti.tk> | 2015-01-04 13:57:11 +0100 |
| commit | fbe3c5fbe1327fd81e2eb8fe30a75c4cf5d7b35c (patch) | |
| tree | 02c7bd3f23e18ffcd2d75257ab215e87ead72c96 /crsm.hpp | |
| parent | a92aea252411f86657081587633a88083a3b14a9 (diff) | |
| download | manager-fbe3c5fbe1327fd81e2eb8fe30a75c4cf5d7b35c.tar.gz manager-fbe3c5fbe1327fd81e2eb8fe30a75c4cf5d7b35c.zip | |
Cleanup completed. New Interface based system.
Diffstat (limited to 'crsm.hpp')
| -rw-r--r-- | crsm.hpp | 179 |
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); +}; + |
