diff options
| author | Markus Mittendrein <git@maxmitti.tk> | 2015-09-22 20:18:41 +0200 |
|---|---|---|
| committer | Markus Mittendrein <git@maxmitti.tk> | 2015-09-22 20:18:41 +0200 |
| commit | df43572fd5a2997b4b8ffcedc026fb400c990161 (patch) | |
| tree | 24a80e2c81ae7041cb36bc14beb84abfea86fb20 | |
| parent | 1f5f2defd78714354e628cf1889235a6340f5625 (diff) | |
| download | manager-df43572fd5a2997b4b8ffcedc026fb400c990161.tar.gz manager-df43572fd5a2997b4b8ffcedc026fb400c990161.zip | |
Code cleanup
Add empty() and clear() to ClientInfo and use it when needed.
Move session-specific members into Session-struct
| -rw-r--r-- | src/ClientInfo.hpp | 10 | ||||
| -rw-r--r-- | src/crsm.cpp | 92 | ||||
| -rw-r--r-- | src/crsm.hpp | 47 |
3 files changed, 81 insertions, 68 deletions
diff --git a/src/ClientInfo.hpp b/src/ClientInfo.hpp index cccff95..3371a18 100644 --- a/src/ClientInfo.hpp +++ b/src/ClientInfo.hpp @@ -116,4 +116,14 @@ public: antiFloodList.push_back(newDateTime); return antiFloodList.size() > maxCount; } + + inline bool empty() + { + return *this != ClientInfo(); + } + + inline void clear() + { + *this = ClientInfo(); + } }; diff --git a/src/crsm.cpp b/src/crsm.cpp index 51136c8..e819b4e 100644 --- a/src/crsm.cpp +++ b/src/crsm.cpp @@ -183,7 +183,7 @@ void CRSM::readServerOutput() if(infoMatch.exactMatch(joinExp.cap(1))) { const ClientInfo& info = ClientInfo::clonkClient(infoMatch.cap(3), infoMatch.cap(1), infoMatch.cap(2).toInt()); - clients.insert(info.pcName, info); + Session.Clonk.Clients.insert(info.pcName, info); QTimer *timer = new QTimer; connect(timer, SIGNAL(timeout()), &greetMapper, SLOT(map())); connect(timer, SIGNAL(timeout()), timer, SLOT(deleteLater())); @@ -243,20 +243,20 @@ void CRSM::readServerOutput() connection->sendCommand(IrcCommand::createMessage(Config.IRC.IngameChannel, "[Clonk] " + info.toString() + " entfernt" + leaveExp.cap(2))); } - if(info == sessionAdmin) + if(info == Session.Clonk.Admin) { - leaveAdmins.insert(info, QDateTime::currentDateTime()); + Session.Clonk.LeaveAdmins.insert(info, QDateTime::currentDateTime()); writeToServer("Rundenadmin wurde freigegeben.\n"); - sessionAdmin = ClientInfo(); + Session.Clonk.Admin.clear(); } - clients.remove(info.pcName); + Session.Clonk.Clients.remove(info.pcName); } - if(clients.size() == 0 && userlist.length() > 0 && !Session.UserWish) + if(Session.Clonk.Clients.size() == 0 && userlist.length() > 0 && !Session.UserWish) { processManager->closeProgFifos(); } - else if(clients.size() == 0 && Config.Clonk.Server.EmptyTimer != -1 && (Session.CountDown == -1 || Session.CountDown > Config.Clonk.Server.EmptyTimer)) + else if(Session.Clonk.Clients.size() == 0 && Config.Clonk.Server.EmptyTimer != -1 && (Session.CountDown == -1 || Session.CountDown > Config.Clonk.Server.EmptyTimer)) { writeToServer("/start " + QString::number(Config.Clonk.Server.EmptyTimer) + "\n"); } @@ -388,10 +388,6 @@ void CRSM::scenarioFinished() return; } Session.clear(); - sessionAdmin = ClientInfo(); - ircAdmin = ClientInfo(); - clients.clear(); - leaveAdmins.clear(); if((autoHost || userlist.length() > 0) && !finish) nextScen(); else if(!Config.IRC.IngameChannel.isEmpty()) @@ -502,9 +498,9 @@ void CRSM::ircMessageReceived(IrcMessage *message) { stopAliasWishEditing(); } - if(ircAdmin == ClientInfo::ircClient(message->nick())) + if(Session.IRC.Admin == ClientInfo::ircClient(message->nick())) { - ircAdmin = ClientInfo(); + Session.IRC.Admin.clear(); } } else if(message->type() == IrcMessage::Kick) @@ -544,20 +540,20 @@ void CRSM::ircMessageReceived(IrcMessage *message) void CRSM::greet(QString pcName) { - if(!clients.contains(pcName)) + if(!Session.Clonk.Clients.contains(pcName)) return; - const ClientInfo &info = clients.value(pcName); + const ClientInfo &info = Session.Clonk.Clients.value(pcName); writeToServer(QString("Hallo " + info.nick + "!\n")); - if(leaveAdmins.contains(info)) + if(Session.Clonk.LeaveAdmins.contains(info)) { int timeGone; - if((timeGone = leaveAdmins.value(info).secsTo(QDateTime::currentDateTime())) < Config.Clonk.Chat.RegainAdminTime && sessionAdmin != ClientInfo()) + if((timeGone = Session.Clonk.LeaveAdmins.value(info).secsTo(QDateTime::currentDateTime())) < Config.Clonk.Chat.RegainAdminTime && !Session.Clonk.Admin.empty()) { writeToServer(info.nick + "! Der Rundenadmin wurde freigegeben, weil du das Spiel verlassen hast.\nDu hast noch " + QString::number(Config.Clonk.Chat.RegainAdminTime - timeGone) + "s Zeit um den Rundenadmin zurückzuholen.\n"); } else { - leaveAdmins.remove(info); + Session.Clonk.LeaveAdmins.remove(info); } } } @@ -1268,13 +1264,13 @@ UserType CRSM::clientUserType(const ClientInfo &client) case Clonk: if(Config.Clonk.Chat.Moderators.contains(client.CUID)) return Moderator; - if(sessionAdmin == client) + if(Session.Clonk.Admin == client) return Admin; break; case IRC: if(ircMods.contains(client.nick)) return Moderator; - else if(ircAdmin == client) + else if(Session.IRC.Admin == client) return Admin; break; case Management: @@ -1391,20 +1387,20 @@ void CRSM::ircCheckUserStatus(const ClientInfo &requester, const ClientInfo &sub void CRSM::setIngameAdmin(const ClientInfo &client, const QString& newAdmin) { - if(clients.contains(newAdmin)) + if(Session.Clonk.Clients.contains(newAdmin)) { - const ClientInfo& info = clients.value(newAdmin); - if(sessionAdmin == info) + const ClientInfo& info = Session.Clonk.Clients.value(newAdmin); + if(Session.Clonk.Admin == info) { respond(client, info.toString() + " ist bereits Rundenadmin.\n"); } - sessionAdmin = info; + Session.Clonk.Admin = info; } else { bool notFound = true, ambigous = false; ClientInfo foundClient; - foreach(const ClientInfo& client, clients) + foreach(const ClientInfo& client, Session.Clonk.Clients) { if(client.nick == newAdmin) { @@ -1427,16 +1423,16 @@ void CRSM::setIngameAdmin(const ClientInfo &client, const QString& newAdmin) respond(client, newAdmin + " wurde nicht gefunden!\n"); return; } - else if(sessionAdmin == foundClient) + else if(Session.Clonk.Admin == foundClient) { - respond(client, sessionAdmin.toString() + " ist bereits Rundenadmin!\n"); + respond(client, Session.Clonk.Admin.toString() + " ist bereits Rundenadmin!\n"); return; } else { - sessionAdmin = foundClient; + Session.Clonk.Admin = foundClient; } - respond(client, sessionAdmin.toString() + " wurde als Rundenadmin eingetragen.\n"); + respond(client, Session.Clonk.Admin.toString() + " wurde als Rundenadmin eingetragen.\n"); } } @@ -1537,11 +1533,11 @@ void CRSM::prepareAndConnectIrc() ClientInfo &CRSM::getClientInfo(const QString &pcName, int cuid, const QString &user) { - if(!clients.contains(pcName)) + if(!Session.Clonk.Clients.contains(pcName)) { - clients.insert(pcName, ClientInfo::clonkClient(user, pcName, cuid)); + Session.Clonk.Clients.insert(pcName, ClientInfo::clonkClient(user, pcName, cuid)); } - return clients[pcName]; + return Session.Clonk.Clients[pcName]; } void CRSM::exit() @@ -1600,7 +1596,7 @@ CMD_FUNCTION_IMPL(admin) switch(client.interface) { case Clonk: - interfaceAdminPtr = &sessionAdmin; + interfaceAdminPtr = &Session.Clonk.Admin; if(args == Config.Auto.Volatile.Clonk.ServerNick || args == Config.Auto.Volatile.Clonk.ServerPCName) { respond(client, "Der Server kann nicht als Rundenadmin eingetragen werden!\n"); @@ -1608,7 +1604,7 @@ CMD_FUNCTION_IMPL(admin) } break; case IRC: - interfaceAdminPtr = &ircAdmin; + interfaceAdminPtr = &Session.IRC.Admin; break; default: return; @@ -1619,9 +1615,9 @@ CMD_FUNCTION_IMPL(admin) respond(client, "Du ist bereits Rundenadmin!\n"); return; } - else if((ircAdmin != ClientInfo() || sessionAdmin != ClientInfo()) && userType < Admin && !(leaveAdmins.contains(client) && leaveAdmins.value(client).secsTo(QDateTime::currentDateTime()) < Config.Clonk.Chat.RegainAdminTime)) + else if((!Session.IRC.Admin.empty() || !Session.Clonk.Admin.empty()) && userType < Admin && !(Session.Clonk.LeaveAdmins.contains(client) && Session.Clonk.LeaveAdmins.value(client).secsTo(QDateTime::currentDateTime()) < Config.Clonk.Chat.RegainAdminTime)) { - respond(client, ircAdmin.toString() + (!ircAdmin.nick.isEmpty() && !sessionAdmin.nick.isEmpty() ? " und " : "") + sessionAdmin.toString() + " ist bereits Rundenadmin!\n"); + respond(client, Session.IRC.Admin.toString() + (!Session.IRC.Admin.nick.isEmpty() && !Session.Clonk.Admin.nick.isEmpty() ? " und " : "") + Session.Clonk.Admin.toString() + " ist bereits Rundenadmin!\n"); return; } else if(args.isEmpty()) @@ -1663,13 +1659,13 @@ CMD_FUNCTION_IMPL(host) { userlist << scen; respond(client, "Szenario " + scen.name + " wurde der Warteschlange" + (scen.league ? " mit Liga" : "") + " hinzugefügt.\n"); - if(userlist.length() == 1 && !Session.UserWish && !Session.Running && Session.Hosting && clients.size() > 0) + if(userlist.length() == 1 && !Session.UserWish && !Session.Running && Session.Hosting && Session.Clonk.Clients.size() > 0) respond(client, "Überrede alle Spieler zu leaven und dein Wunsch wird sofort gehostet ;-)\n"); else if(!Session.Hosting) { nextScen(); } - else if(clients.size() == 0 && !Session.UserWish) + else if(Session.Clonk.Clients.size() == 0 && !Session.UserWish) { processManager->closeProgFifos(); } @@ -1824,26 +1820,26 @@ CMD_FUNCTION_IMPL(io) CMD_FUNCTION_IMPL(pcNamePassToClonk) ClientInfo info; - if(clients.contains(args)) + if(Session.Clonk.Clients.contains(args)) { - info = clients.value(args); + info = Session.Clonk.Clients.value(args); } else { - foreach(const QString& pcName, clients.keys()) + foreach(const QString& pcName, Session.Clonk.Clients.keys()) { if(pcName.compare(args, Qt::CaseInsensitive) == 0) { - info = clients.value(pcName); + info = Session.Clonk.Clients.value(pcName); break; } } } - if(info == ClientInfo()) + if(info.empty()) { bool notFound = true, ambigous = false; ClientInfo foundClient; - foreach(const ClientInfo& client, clients) + foreach(const ClientInfo& client, Session.Clonk.Clients) { if(client.nick.compare(args, Qt::CaseInsensitive) == 0) { @@ -1888,14 +1884,14 @@ CMD_FUNCTION_IMPL(ingameadmin) } CMD_FUNCTION_IMPL(noadmin) - ircAdmin = ClientInfo(); - sessionAdmin = ClientInfo(); + Session.IRC.Admin.clear(); + Session.Clonk.Admin.clear(); respond(client, "Rundenadmin wurde freigegeben.\n"); } CMD_FUNCTION_IMPL(clientlist) QString response = "Verbundene Clients (Chatnick (PC-Name)): "; - foreach(const ClientInfo& connectedClient, clients) + foreach(const ClientInfo& connectedClient, Session.Clonk.Clients) { if(connectedClient.nick.isEmpty()) continue; @@ -2061,7 +2057,7 @@ IRC_CHECK_CALLBACK_IMPL(ircSetAdmin) } else { - ircAdmin = subject; + Session.IRC.Admin = subject; respond(requester, subject.toString() + " wurde als Rundenadmin eingetragen.\n"); } } diff --git a/src/crsm.hpp b/src/crsm.hpp index fc4ee1e..117df9d 100644 --- a/src/crsm.hpp +++ b/src/crsm.hpp @@ -50,21 +50,6 @@ public: ScenarioSettings(const QString& name, const ClientInfo& client, bool league = false) : name(name), league(league), wishClient(client) {} }; -struct CRSMSession { - bool IrcUseIngameChat = false; - bool League = false; - bool Running = false; - bool UserWish = false; - int CountDown = -1; - bool Hosting = false; - QString ScenarioName = ""; - - void clear() - { - *this = CRSMSession(); - } -}; - class CRSM : public QObject { private: @@ -120,6 +105,33 @@ private slots: private: CRSMConfig Config; + + struct CRSMSession { + bool IrcUseIngameChat = false; + bool League = false; + bool Running = false; + bool UserWish = false; + int CountDown = -1; + bool Hosting = false; + QString ScenarioName = ""; + + + struct { + ClientInfo Admin; + QMap<QString, ClientInfo> Clients; + QMap<ClientInfo, QDateTime> LeaveAdmins; + } Clonk; + + struct { + ClientInfo Admin; + } IRC; + + void clear() + { + *this = CRSMSession(); + } + } Session; + QList<ScenarioSettings> userlist; QList<ScenarioSettings> autolist; QList<ScenarioSettings> nextAutoScens; @@ -135,14 +147,9 @@ private: QTextStream *qout; QTextStream *qin; bool finish; - CRSMSession Session; - QMap<QString, ClientInfo> clients; IrcConnection *connection = 0; bool autoHost = true; QSignalMapper greetMapper; - ClientInfo sessionAdmin; - ClientInfo ircAdmin; - QMap<ClientInfo, QDateTime> leaveAdmins; QFile *logfile; QTextStream logstream; QTextCodec *codec; |
