#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 bool raw(const QString& msg); virtual bool rawTimed(const QString& msg, const QTime& time); virtual bool lobbyCountdown(unsigned int seconds); virtual bool lobbyCountdownAborted(); virtual bool playerRemoved(const QString& name); virtual bool playerJoined(const ClientInfo& client, const QString& name); virtual bool watchdog(const QString& id); virtual bool clientMessage(ClientInfo& client, const QString& message, MessageType type, const QTime& time); virtual bool clientConnected(const ClientInfo& client); virtual bool clientRemoved(const ClientInfo& client, const QString& reason); virtual bool clientStateChanged(const ClientInfo& client, bool activated); virtual bool gameLoading(); virtual bool gameStarted(); virtual bool 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); };