#pragma once #include #include "ClientInfo.hpp" #include "CRSMSession.hpp" class ClonkControllerInterface { public: virtual ~ClonkControllerInterface(); virtual void writeToServer(const QString& msg) = 0; }; class ClonkControlInterface { protected: ClonkControllerInterface* controller = nullptr; public: virtual ~ClonkControlInterface(); void setController(ClonkControllerInterface* controller); 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, const QString& reason = "") = 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 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); };