Advertisement
Guest User

Untitled

a guest
Feb 18th, 2024
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.05 KB | None | 0 0
  1. #include "echoserver.h"
  2. #include "QtWebSockets/qwebsocketserver.h"
  3. #include "QtWebSockets/qwebsocket.h"
  4. #include <QtCore/QDebug>
  5.  
  6. QT_USE_NAMESPACE
  7.                  
  8. //! [constructor]
  9. EchoServer::EchoServer(quint16 port, bool debug, QObject *parent) :
  10.     QObject(parent),
  11.     m_pWebSocketServer(new QWebSocketServer(QStringLiteral("Echo Server"),
  12.                                             QWebSocketServer::NonSecureMode, this)),
  13.     m_debug(debug)
  14. {
  15.     if (m_pWebSocketServer->listen(QHostAddress::Any, port)) {
  16.         if (m_debug)
  17.             qDebug() << "Echoserver listening on port" << port;
  18.         connect(m_pWebSocketServer, &QWebSocketServer::newConnection,
  19.                 this, &EchoServer::onNewConnection);
  20.         connect(m_pWebSocketServer, &QWebSocketServer::closed, this, &EchoServer::closed);
  21.     }
  22. }
  23. //! [constructor]
  24.  
  25. EchoServer::~EchoServer()
  26. {
  27.     m_pWebSocketServer->close();
  28.     qDeleteAll(m_clients.begin(), m_clients.end());
  29. }
  30.  
  31. //! [onNewConnection]
  32. void EchoServer::onNewConnection()
  33. {
  34.     QWebSocket *pSocket = m_pWebSocketServer->nextPendingConnection();  // nextPendingConnection - возвращает следующее ожидающее соединение
  35.                                                                         // QWebSocket, который не принадлежит QWebSocketServer, а значит после
  36.                                                                         // того как этот QWebSocket станет не нужным необходимо очистить память
  37.                                                                         // nextPendingConnection - вернет nullptr если ожидающиъ соединений нет
  38.  
  39.     connect(pSocket, &QWebSocket::textMessageReceived, this, &EchoServer::processTextMessage);
  40.     connect(pSocket, &QWebSocket::binaryMessageReceived, this, &EchoServer::processBinaryMessage);
  41.     connect(pSocket, &QWebSocket::disconnected, this, &EchoServer::socketDisconnected);
  42.  
  43.     m_clients << pSocket;
  44.  
  45. }
  46. //! [onNewConnection]
  47.  
  48. //! [processTextMessage]
  49. void EchoServer::processTextMessage(QString message)
  50. {
  51.     QWebSocket *pClient = qobject_cast<QWebSocket *>(sender());
  52.     if (m_debug)
  53.         qDebug() << "Message received:" << message;
  54.     //if (pClient) {
  55.         //pClient->sendTextMessage(message);
  56.     //}
  57. }
  58. //! [processTextMessage]
  59.  
  60. //! [processBinaryMessage]
  61. void EchoServer::processBinaryMessage(QByteArray message)
  62. {
  63.     QWebSocket *pClient = qobject_cast<QWebSocket *>(sender());
  64.     if (m_debug)
  65.         qDebug() << "Binary Message received:" << message;
  66.     if (pClient) {
  67.         pClient->sendBinaryMessage(message);
  68.     }
  69. }
  70. //! [processBinaryMessage]
  71.  
  72. //! [socketDisconnected]
  73. void EchoServer::socketDisconnected()
  74. {
  75.     QWebSocket *pClient = qobject_cast<QWebSocket *>(sender());
  76.     if (m_debug)
  77.         qDebug() << "socketDisconnected:" << pClient;
  78.     if (pClient) {
  79.         m_clients.removeAll(pClient);
  80.         pClient->deleteLater();
  81.     }
  82. }
  83. //! [socketDisconnected]
  84.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement