fhq-server  v0.2.33
Documentation for fhq-server. FreeHackQuest is an open source platform for competitions of computer security.
websocketserver.h
Go to the documentation of this file.
1 #ifndef WEBSOCKETSERVER_H
2 #define WEBSOCKETSERVER_H
3 
4 #include <QObject>
5 #include <QString>
6 #include <QWebSocket>
7 #include <QWebSocketServer>
8 #include <QMap>
9 #include <QFile>
10 #include <QSqlDatabase>
11 #include <QSqlError>
12 #include <QtNetwork/QSslError>
13 
14 #include <cmd_handlers.h>
15 
16 // QT_FORWARD_DECLARE_CLASS(QWebSocketServer)
17 // QT_FORWARD_DECLARE_CLASS(QWebSocket)
18 
27 class WebSocketServer : public QObject, public IWebSocketServer {
28 
29  private:
30  Q_OBJECT
31  public:
32  explicit WebSocketServer(QObject *parent = Q_NULLPTR);
34  bool isFailed();
35 
36  // IWebSocketServer
37  virtual int getConnectedUsers() override;
38  virtual void sendMessage(QWebSocket *pClient, const nlohmann::json& jsonResponse) override;
39  virtual void sendMessageError(QWebSocket *pClient, const std::string &sCmd, const std::string & sM, WsjcppError error) override;
40  virtual void sendToAll(const nlohmann::json& jsonMessage) override;
41  void sendToOne(QWebSocket *pClient, const nlohmann::json &jsonMessage) override;
42  virtual void setWsjcppUserSession(QWebSocket *pClient, WsjcppUserSession *pWsjcppUserSession) override;
43  virtual WsjcppUserSession *getWsjcppUserSession(QWebSocket *pClient) override;
44  void removeWsjcppUserSession(QWebSocket *pClient);
45 
46  Q_SIGNALS:
47  void closed();
48  void sig_sendToAll(QString jsonMessage);
49  void signal_sendToOne(QWebSocket *pClient, QString jsonMessage);
50 
51  private Q_SLOTS:
52  void onNewConnection();
53  void onNewConnectionSSL();
54  void processTextMessage(const QString &message);
55  void processBinaryMessage(QByteArray message);
56  void socketDisconnected();
57  void onSslErrors(const QList<QSslError> &errors);
58  void slot_sendToAll(QString jsonMessage);
59  void slot_sendToOne(QWebSocket *pClient, QString message);
60 
61  private:
62  void initNewConnection(const std::string &sPrefix, QWebSocket *pSocket);
63  void sendServerMessage(QWebSocket *pSocket);
64  void logSocketError(QAbstractSocket::SocketError socketError);
65 
66  QWebSocketServer *m_pWebSocketServer;
67  QWebSocketServer *m_pWebSocketServerSSL;
68  QList<QWebSocket *> m_clients;
69  std::vector<WsjcppSocketClient *> m_vClients;
70  // TODO redesign to std::map and move to EmployWSServer
71  // TODO rename m_tokens to m_mapUserSessions;
72  // TODO usersession must be single std::map<std::string sUserUuid, WsjcppUserSession *>
73  std::mutex m_mtxUserSession;
74  std::map<QWebSocket *, WsjcppUserSession *> m_mapUserSession;
75 
76  bool m_bFailed;
77  std::string TAG;
78 };
79 
80 #endif //WEBSOCKETSERVER_H
void processBinaryMessage(QByteArray message)
Definition: websocketserver.cpp:240
void onSslErrors(const QList< QSslError > &errors)
Definition: websocketserver.cpp:265
void onNewConnectionSSL()
Handling new connection by wss://.
Definition: websocketserver.cpp:166
std::map< QWebSocket *, WsjcppUserSession * > m_mapUserSession
Definition: websocketserver.h:74
void slot_sendToAll(QString jsonMessage)
Definition: websocketserver.cpp:335
QList< QWebSocket * > m_clients
Definition: websocketserver.h:68
~WebSocketServer()
Definition: websocketserver.cpp:92
QWebSocketServer * m_pWebSocketServerSSL
Definition: websocketserver.h:67
bool m_bFailed
Definition: websocketserver.h:76
void logSocketError(QAbstractSocket::SocketError socketError)
Definition: websocketserver.cpp:395
void sig_sendToAll(QString jsonMessage)
IWebSocketServer -.
Definition: cmd_handlers.h:86
virtual void sendMessage(QWebSocket *pClient, const nlohmann::json &jsonResponse) override
Definition: websocketserver.cpp:277
void socketDisconnected()
Definition: websocketserver.cpp:251
bool isFailed()
Definition: websocketserver.cpp:100
WsjcppError - helper class for errors.
Definition: cmd_handlers.h:18
void signal_sendToOne(QWebSocket *pClient, QString jsonMessage)
QWebSocketServer * m_pWebSocketServer
Definition: websocketserver.h:66
WebSocketServer(QObject *parent=Q_NULLPTR)
Definition: websocketserver.cpp:20
virtual int getConnectedUsers() override
Definition: websocketserver.cpp:271
void slot_sendToOne(QWebSocket *pClient, QString message)
Definition: websocketserver.cpp:348
std::string TAG
Definition: websocketserver.h:77
WebSocket Server implementation Implemented ws://addr:1234 and wss://addr:4613 (optional) ...
Definition: websocketserver.h:27
void onNewConnection()
Handling new connection by ws://.
Definition: websocketserver.cpp:153
void sendToOne(QWebSocket *pClient, const nlohmann::json &jsonMessage) override
Definition: websocketserver.cpp:328
void removeWsjcppUserSession(QWebSocket *pClient)
Definition: websocketserver.cpp:383
void processTextMessage(const QString &message)
Definition: websocketserver.cpp:174
WsjcppUserSession -.
Definition: cmd_handlers.h:32
virtual void setWsjcppUserSession(QWebSocket *pClient, WsjcppUserSession *pWsjcppUserSession) override
Definition: websocketserver.cpp:360
std::mutex m_mtxUserSession
Definition: websocketserver.h:73
void sendServerMessage(QWebSocket *pSocket)
Definition: websocketserver.cpp:106
virtual WsjcppUserSession * getWsjcppUserSession(QWebSocket *pClient) override
Definition: websocketserver.cpp:373
virtual void sendMessageError(QWebSocket *pClient, const std::string &sCmd, const std::string &sM, WsjcppError error) override
Definition: websocketserver.cpp:307
std::vector< WsjcppSocketClient * > m_vClients
Definition: websocketserver.h:69
void initNewConnection(const std::string &sPrefix, QWebSocket *pSocket)
Definition: websocketserver.cpp:121
virtual void sendToAll(const nlohmann::json &jsonMessage) override
Definition: websocketserver.cpp:321