diff options
Diffstat (limited to 'src/ClonkInterface.hpp')
| -rw-r--r-- | src/ClonkInterface.hpp | 80 |
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); +}; |
