summaryrefslogtreecommitdiffstats
path: root/src/ClonkInterface.hpp
blob: a6961f3a96a49c8d5ea515aed6b7e974f423ce7b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#pragma once
#include <QString>

#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<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);
};