Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 313ff1dc

Přidáno uživatelem Oto Šťáva před téměř 4 roky(ů)

Re #8906 - Server doc comments; cleanup

Zobrazit rozdíly:

deltarobot/curvedataserver.cpp
131 131

  
132 132
CurveDataServer::~CurveDataServer()
133 133
{
134
    _threadIsRunning = false;
135
    _pingThread.join();
136

  
134 137
    std::lock_guard<decltype (_socketsLock)> l(_socketsLock);
135 138
    for (auto& client : _sockets)
136 139
    {
137 140
        terminateConnection(client, "Server is stopping");
138 141
    }
139 142
    _sockets.clear();
140

  
141
    _threadIsRunning = false;
142 143
}
143 144

  
144 145
void CurveDataServer::onNewConnection()
......
437 438

  
438 439
void CurveDataServer::threadFunction()
439 440
{
441
    /*
440 442
    while (_threadIsRunning)
441 443
    {
442 444
        //processPings();
......
445 447

  
446 448
        std::this_thread::sleep_for(std::chrono::milliseconds(100));
447 449
    }
450
    */
448 451
}
449 452

  
450 453
void CurveDataServer::processPings()
deltarobot/curvedataserver.h
8 8
#include <mutex>
9 9
#include <thread>
10 10

  
11

  
12
/**
13
 * Manages communication with clients who can connect to the server in order to receive real-time data about the current
14
 * exercise. The served data may be used e.g. for external visualization. A reference implementation of such a client is
15
 * the deltarobot-vr Unity application.
16
 */
11 17
class CurveDataServer : QObject
12 18
{
13 19
    Q_OBJECT
14 20

  
15 21
public:
22

  
23
    /**
24
     * Holds information about a client, its Qt socket, data buffer etc.
25
     */
16 26
    struct Client {
17 27
        static const size_t BUF_SIZE = 4096;
18 28
        static const size_t MESSAGE_ID_SIZE = 2;
19 29

  
20
        QTcpSocket* socket;
21
        std::map<uint64_t, uint64_t> ping;  ///< key: ping ID;  value: ping timestamp (msec);
22
        uint64_t latency;               ///< client's latency
23
        uint64_t lastPong;              ///< timestamp of last pong
30
        QTcpSocket* socket;                 ///< Communication socket
31
        std::map<uint64_t, uint64_t> ping;  ///< Key: ping ID;  Value: ping timestamp (msec);
32
        uint64_t latency;                   ///< Current latency
33
        uint64_t lastPong;                  ///< Timestamp of the last pong
24 34

  
25
        char buf[BUF_SIZE];
26
        size_t bufUsed;
35
        char buf[BUF_SIZE];                 ///< Message buffer
36
        size_t bufUsed = 0;                 ///< Number of bytes used up in the message buffer
27 37

  
28
        bool magic = false;
29
        bool version = false;
30
        bool initialized = false;
38
        bool magic = false;                 ///< Whether the client has sent the protocol magic
39
        bool version = false;               ///< Whether the client has sent the protocol version
40
        bool initialized = false;           ///< Whether the client has successfully initialized its communication (by sending its magic and version)
31 41

  
32 42
        Client(QTcpSocket* socket);
33 43
    };
......
35 45
    explicit CurveDataServer();
36 46
    ~CurveDataServer();
37 47

  
48
    /** Sends the current actuator position. */
38 49
    void sendActuatorPosition(float x, float y, float z);
50

  
51
    /** Sends the actual direction the actuator is moving in. */
39 52
    void sendActualDirection(float x, float y, float z);
53

  
54
    /** Sends the direction the actuator *should* be moving in, in order to draw the curve. */
40 55
    void sendTargetDirection(float x, float y, float z);
56

  
57
    /** Stores and sends the specified curve. */
41 58
    void sendNewCurve(QList<QVector4D> &points);
59

  
60
    /** Stores and sends the specified curve. */
42 61
    void sendNewCurve(QList<QVector3D> &points);
62

  
63
    /** Sends the currently stored curve. This is used for newly connected clients. */
43 64
    void sendCurve(Client &client);
44 65

  
45
    void processPings();            ///< send pings, check timeouts
66
    /** Sends ping messages to the clients, checks whether any clients have timed out, and disconnects any that have. */
67
    void processPings();
46 68

  
47 69
public slots:
48 70
    void onNewConnection();
......
50 72
    void onReadyRead();
51 73

  
52 74
private:
75
    /** Gets the client that is connected via the specified socket. */
53 76
    QList<Client>::iterator clientOf(QTcpSocket *socket);
54 77

  
55 78
    void handleMessage(Client& client, uint16_t messageId, void* content);
......
58 81
    void handlePong(Client& client, uint64_t* content);
59 82
    void handleEOT(Client& client, char* content);
60 83

  
61
    void validPreamble(Client& client);
62 84
    void removeSocket(QTcpSocket *socket);
63 85
    void terminateConnection(Client& client, std::string&& reason);
64 86
    void sendPing(Client& client);
......
75 97
    QTcpServer _server;
76 98
    std::thread _pingThread;
77 99

  
100
    /**
101
     * A flag that can be switched to `false` when the application should end, in order to gracefully stop the ping
102
     * thread.
103
     */
78 104
    volatile bool _threadIsRunning = true;
79 105

  
80 106
    std::recursive_mutex _socketsLock;

Také k dispozici: Unified diff