From 71b5fc5dd10e9edce8db886f6c05b7950b3cca6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= Date: Mon, 25 Sep 2017 16:16:58 +0200 Subject: Revamp WebSocket's simple-chat example - Replace Q_* macros with their 'modern' substitutes - Replace a usage of qDebug with QTextStream - Print a little piece of text whenever a client connects - Add a textbox to the html page to set the host to connect to - Enable/disable disconnect and send button based on connection Task-number: QTBUG-60656 Change-Id: Ieec571c3964f94cd464912054acda3208c02c898 Reviewed-by: Liang Qi Reviewed-by: Timur Pocheptsov --- examples/websockets/simplechat/chatserver.cpp | 40 +++++++++++++++++---------- 1 file changed, 25 insertions(+), 15 deletions(-) (limited to 'examples/websockets/simplechat/chatserver.cpp') diff --git a/examples/websockets/simplechat/chatserver.cpp b/examples/websockets/simplechat/chatserver.cpp index ae207f5..8885fe8 100644 --- a/examples/websockets/simplechat/chatserver.cpp +++ b/examples/websockets/simplechat/chatserver.cpp @@ -48,23 +48,31 @@ ** ****************************************************************************/ #include "chatserver.h" -#include "QtWebSockets/QWebSocketServer" -#include "QtWebSockets/QWebSocket" -#include + +#include +#include + +#include +using namespace std; QT_USE_NAMESPACE +static QString getIdentifier(QWebSocket *peer) +{ + return QStringLiteral("%1:%2").arg(peer->peerAddress().toString(), + QString::number(peer->peerPort())); +} + //! [constructor] ChatServer::ChatServer(quint16 port, QObject *parent) : QObject(parent), - m_pWebSocketServer(Q_NULLPTR) + m_pWebSocketServer(new QWebSocketServer(QStringLiteral("Chat Server"), + QWebSocketServer::NonSecureMode, + this)) { - m_pWebSocketServer = new QWebSocketServer(QStringLiteral("Chat Server"), - QWebSocketServer::NonSecureMode, - this); if (m_pWebSocketServer->listen(QHostAddress::Any, port)) { - qDebug() << "Chat Server listening on port" << port; + QTextStream(stdout) << "Chat Server listening on port " << port << '\n'; connect(m_pWebSocketServer, &QWebSocketServer::newConnection, this, &ChatServer::onNewConnection); } @@ -73,31 +81,32 @@ ChatServer::ChatServer(quint16 port, QObject *parent) : ChatServer::~ChatServer() { m_pWebSocketServer->close(); - qDeleteAll(m_clients.begin(), m_clients.end()); } //! [constructor] //! [onNewConnection] void ChatServer::onNewConnection() { - QWebSocket *pSocket = m_pWebSocketServer->nextPendingConnection(); + auto pSocket = m_pWebSocketServer->nextPendingConnection(); + QTextStream(stdout) << getIdentifier(pSocket) << " connected!\n"; + pSocket->setParent(this); - connect(pSocket, &QWebSocket::textMessageReceived, this, &ChatServer::processMessage); - connect(pSocket, &QWebSocket::disconnected, this, &ChatServer::socketDisconnected); + connect(pSocket, &QWebSocket::textMessageReceived, + this, &ChatServer::processMessage); + connect(pSocket, &QWebSocket::disconnected, + this, &ChatServer::socketDisconnected); m_clients << pSocket; } //! [onNewConnection] //! [processMessage] -void ChatServer::processMessage(QString message) +void ChatServer::processMessage(const QString &message) { QWebSocket *pSender = qobject_cast(sender()); for (QWebSocket *pClient : qAsConst(m_clients)) { if (pClient != pSender) //don't echo message back to sender - { pClient->sendTextMessage(message); - } } } //! [processMessage] @@ -106,6 +115,7 @@ void ChatServer::processMessage(QString message) void ChatServer::socketDisconnected() { QWebSocket *pClient = qobject_cast(sender()); + QTextStream(stdout) << getIdentifier(pClient) << " disconnected!\n"; if (pClient) { m_clients.removeAll(pClient); -- cgit v1.2.3