1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
#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 "ClientInfo.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"
#ifdef Q_OS_LINUX64
#define C4GROUP_EXECUTABLE "c4group64"
#else
#define C4GROUP_EXECUTABLE "c4group"
#endif
class CRSM : public QObject
{
private:
enum IrcModOperations {
ModCheck,
ModInfo,
SkipScen,
ClearUserList,
SkipCurrentScen,
Autohost,
NoAutohost,
ModHelp,
Kill,
IO,
CheckOnly,
NewAlias,
AliasWishes,
IngameChat
};
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;
QString aliasWishEditor = "";
QString currentAliasWish = "";
QMap<QString, QList<QPair<IrcModOperations, QString>>> ircModFifos;
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;
QFile *logfile;
QTextStream logstream;
QTextCodec *codec;
QStringList ircModIOList;
QString writtenToServer;
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();
//QByteArray toClonkFormat(const QString&);
void ircCheckModCmd(const QString &nick, IrcModOperations operation, QString arg = "");
void ircModOperation(const QString &nick, IrcModOperations operation, QString arg);
void ircModOperation(const QString &nick, QPair<IrcModOperations, QString> operationArg);
QString skipScen();
void skipCurrent();
void writeToServer(const QString& message);
void writeConfig();
QString addAliasWish(const QString& param);
void ircModJoined(const QString& nick);
void informModsAboutAliasWish();
void editAliasWishes();
void editAliasWishes(const QString &message);
void stopAliasWishEditing();
QString ircActivateIngameChat(bool activated = true);
QStringList listC4Folder(const QString &path);
};
|