summaryrefslogtreecommitdiffstats
path: root/src/ClonkInterface.hpp
diff options
context:
space:
mode:
authorMarkus Mittendrein <git@maxmitti.tk>2017-03-21 22:00:59 +0100
committerMarkus Mittendrein <git@maxmitti.tk>2017-04-06 12:00:13 +0200
commit3fe710cb029522b86ef27c322f0cb793b1368051 (patch)
treea927da96f3851f68e2b16d40f2d20b73d67cce1d /src/ClonkInterface.hpp
parente56c72bf1a0edda6deb3da548923939a88fd930b (diff)
downloadmanager-3fe710cb029522b86ef27c322f0cb793b1368051.tar.gz
manager-3fe710cb029522b86ef27c322f0cb793b1368051.zip
Move Parser into own class
Diffstat (limited to 'src/ClonkInterface.hpp')
-rw-r--r--src/ClonkInterface.hpp80
1 files changed, 80 insertions, 0 deletions
diff --git a/src/ClonkInterface.hpp b/src/ClonkInterface.hpp
new file mode 100644
index 0000000..376acbe
--- /dev/null
+++ b/src/ClonkInterface.hpp
@@ -0,0 +1,80 @@
+#pragma once
+#include <QString>
+
+#include "ClientInfo.hpp"
+#include "CRSMSession.hpp"
+
+class ClonkControlInterface {
+ ClonkControlInterface() = delete;
+ virtual ~ClonkControlInterface();
+public:
+ virtual void serverMessage(const QString& msg, bool action = false) = 0;
+ virtual void setCountdown(unsigned int seconds) = 0;
+ virtual void abortCountdown() = 0;
+ virtual void setCommand(const QString& command) = 0; // split?
+ virtual void kick(const ClientInfo& client) = 0;
+ virtual void watchdog(const QString& id) = 0;
+ virtual void rawCommand(const QString& command) = 0;
+ virtual void alert() = 0; // specify client? (Clonk patch first)
+};
+
+class ClonkOutputInterface {
+public:
+ virtual ~ClonkOutputInterface();
+
+ enum MessageType { Message, Action, Sound };
+
+ virtual void raw(const QString& msg);
+ virtual void rawTimed(const QString& msg, const QTime& time);
+
+ virtual void lobbyCountdown(unsigned int seconds);
+ virtual void lobbyCountdownAborted();
+
+ virtual void playerRemoved(const QString& name);
+ virtual void playerJoined(const ClientInfo& client, const QString& name);
+
+ virtual void watchdog(const QString& id);
+
+ virtual void clientMessage(ClientInfo& client, const QString& message, MessageType type, const QTime& time);
+
+ virtual void clientConnected(const ClientInfo& client);
+ virtual void clientRemoved(const ClientInfo& client, const QString& reason);
+ virtual void clientStateChanged(const ClientInfo& client, bool activated);
+
+ virtual void gameLoading();
+ virtual void gameStarted();
+
+ virtual void masterserverError(const QString& msg);
+};
+
+class ClonkParser {
+
+protected:
+ QList<ClonkOutputInterface*> targets;
+ CRSMSession& Session;
+
+public:
+ ClonkParser(CRSMSession& session);
+ virtual ~ClonkParser();
+
+ void addTarget(ClonkOutputInterface* target);
+ void removeTarget(ClonkOutputInterface* target);
+
+ virtual void parseMessage(const QString& msg) = 0;
+
+protected:
+ void raw(const QString &msg);
+ void rawTimed(const QString &msg, const QTime &time);
+ void lobbyCountdown(unsigned int seconds);
+ void lobbyCountdownAborted();
+ void playerRemoved(const QString &name);
+ void playerJoined(const ClientInfo &client, const QString &name);
+ void watchdog(const QString &id);
+ void clientMessage(ClientInfo &client, const QString &message, ClonkOutputInterface::MessageType type, const QTime &time);
+ void clientConnected(const ClientInfo &client);
+ void clientRemoved(const ClientInfo &client, const QString &reason);
+ void clientStateChanged(const ClientInfo &client, bool activated);
+ void gameLoading();
+ void gameStarted();
+ void masterserverError(const QString &msg);
+};