Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "echoserver.h"
- #include "QtWebSockets/qwebsocketserver.h"
- #include "QtWebSockets/qwebsocket.h"
- #include <QtCore/QDebug>
- QT_USE_NAMESPACE
- //! [constructor]
- EchoServer::EchoServer(quint16 port, bool debug, QObject *parent) :
- QObject(parent),
- m_pWebSocketServer(new QWebSocketServer(QStringLiteral("Echo Server"),
- QWebSocketServer::NonSecureMode, this)),
- m_debug(debug)
- {
- if (m_pWebSocketServer->listen(QHostAddress::Any, port)) {
- if (m_debug)
- qDebug() << "Echoserver listening on port" << port;
- connect(m_pWebSocketServer, &QWebSocketServer::newConnection,
- this, &EchoServer::onNewConnection);
- connect(m_pWebSocketServer, &QWebSocketServer::closed, this, &EchoServer::closed);
- }
- }
- //! [constructor]
- EchoServer::~EchoServer()
- {
- m_pWebSocketServer->close();
- qDeleteAll(m_clients.begin(), m_clients.end());
- }
- //! [onNewConnection]
- void EchoServer::onNewConnection()
- {
- QWebSocket *pSocket = m_pWebSocketServer->nextPendingConnection(); // nextPendingConnection - возвращает следующее ожидающее соединение
- // QWebSocket, который не принадлежит QWebSocketServer, а значит после
- // того как этот QWebSocket станет не нужным необходимо очистить память
- // nextPendingConnection - вернет nullptr если ожидающиъ соединений нет
- connect(pSocket, &QWebSocket::textMessageReceived, this, &EchoServer::processTextMessage);
- connect(pSocket, &QWebSocket::binaryMessageReceived, this, &EchoServer::processBinaryMessage);
- connect(pSocket, &QWebSocket::disconnected, this, &EchoServer::socketDisconnected);
- m_clients << pSocket;
- }
- //! [onNewConnection]
- //! [processTextMessage]
- void EchoServer::processTextMessage(QString message)
- {
- QWebSocket *pClient = qobject_cast<QWebSocket *>(sender());
- if (m_debug)
- qDebug() << "Message received:" << message;
- //if (pClient) {
- //pClient->sendTextMessage(message);
- //}
- }
- //! [processTextMessage]
- //! [processBinaryMessage]
- void EchoServer::processBinaryMessage(QByteArray message)
- {
- QWebSocket *pClient = qobject_cast<QWebSocket *>(sender());
- if (m_debug)
- qDebug() << "Binary Message received:" << message;
- if (pClient) {
- pClient->sendBinaryMessage(message);
- }
- }
- //! [processBinaryMessage]
- //! [socketDisconnected]
- void EchoServer::socketDisconnected()
- {
- QWebSocket *pClient = qobject_cast<QWebSocket *>(sender());
- if (m_debug)
- qDebug() << "socketDisconnected:" << pClient;
- if (pClient) {
- m_clients.removeAll(pClient);
- pClient->deleteLater();
- }
- }
- //! [socketDisconnected]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement