summaryrefslogtreecommitdiff
path: root/examples/websocketserver/helloworldserver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/websocketserver/helloworldserver.cpp')
-rw-r--r--examples/websocketserver/helloworldserver.cpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/examples/websocketserver/helloworldserver.cpp b/examples/websocketserver/helloworldserver.cpp
new file mode 100644
index 0000000..fa833c0
--- /dev/null
+++ b/examples/websocketserver/helloworldserver.cpp
@@ -0,0 +1,56 @@
+#include "helloworldserver.h"
+#include "websocketserver.h"
+#include "websocket.h"
+#include <QDebug>
+
+HelloWorldServer::HelloWorldServer(quint16 port, QObject *parent) :
+ QObject(parent),
+ m_pWebSocketServer(0),
+ m_clients()
+{
+ m_pWebSocketServer = new WebSocketServer(this);
+ if (m_pWebSocketServer->listen(QHostAddress::Any, port))
+ {
+ qDebug() << "HelloWorld Server listening on port" << port;
+ connect(m_pWebSocketServer, SIGNAL(newConnection()), this, SLOT(onNewConnection()));
+ }
+}
+
+void HelloWorldServer::onNewConnection()
+{
+ qDebug() << "Client connected.";
+ WebSocket *pSocket = m_pWebSocketServer->nextPendingConnection();
+
+ connect(pSocket, SIGNAL(textFrameReceived(QString,bool)), this, SLOT(processMessage(QString, bool)));
+ //connect(pSocket, SIGNAL(binaryFrameReceived(QByteArray,bool)), this, SLOT(processBinaryMessage(QByteArray)));
+ connect(pSocket, SIGNAL(disconnected()), this, SLOT(socketDisconnected()));
+ //connect(pSocket, SIGNAL(pong(quint64)), this, SLOT(processPong(quint64)));
+
+ m_clients << pSocket;
+}
+
+void HelloWorldServer::processMessage(QString message, bool isLastFrame)
+{
+ Q_UNUSED(isLastFrame);
+ WebSocket *pClient = qobject_cast<WebSocket *>(sender());
+ if (pClient != 0)
+ {
+ QString answer;
+ for (int i = 0; i < message.length(); ++i)
+ {
+ answer.push_front(message[i]);
+ }
+ pClient->send(answer);
+ }
+}
+
+void HelloWorldServer::socketDisconnected()
+{
+ WebSocket *pClient = qobject_cast<WebSocket *>(sender());
+ if (pClient != 0)
+ {
+ qDebug() << "Client disconnected";
+ m_clients.removeAll(pClient);
+ pClient->deleteLater();
+ }
+}