diff options
author | Milian Wolff <mail@milianw.de> | 2014-03-21 14:49:00 +0100 |
---|---|---|
committer | Milian Wolff <milian.wolff@kdab.com> | 2014-07-02 14:41:09 +0200 |
commit | 561e268bd5a3c5b9f578935766506eee2e81d382 (patch) | |
tree | b6e95452c27c69d21fff8605823255aeed72b81d /src/imports/qmlwebsockets/qqmlwebsocket.cpp | |
parent | 3f99082f3bb81982e0c6777875fb5c2a1d9033df (diff) | |
download | qtwebsockets-561e268bd5a3c5b9f578935766506eee2e81d382.tar.gz |
Add initial support for a declarative WebSocketServer.
It comes with basic support for setting up a non-secure server
listening on an arbitrary host and port. The name can be set,
and whether the server should be listening or accept connections.
The error string is also available via a property.
When a client connects, a clientConnected(QQmlWebSocket*) signal is
emitted.
To showcase the usage and functionality, a new qmlwebsocketserver
example is added which behaves similar to qmlwebsocketclient. It
simply sends messages from a WebSocket to a local WebSocketServer
which in turn sends a simple response.
Change-Id: Ib6318155ed08cbeea47d820b709764d2e36dcc45
Reviewed-by: Kurt Pattyn <pattyn.kurt@gmail.com>
Diffstat (limited to 'src/imports/qmlwebsockets/qqmlwebsocket.cpp')
-rw-r--r-- | src/imports/qmlwebsockets/qqmlwebsocket.cpp | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/src/imports/qmlwebsockets/qqmlwebsocket.cpp b/src/imports/qmlwebsockets/qqmlwebsocket.cpp index d165260..9d10827 100644 --- a/src/imports/qmlwebsockets/qqmlwebsocket.cpp +++ b/src/imports/qmlwebsockets/qqmlwebsocket.cpp @@ -120,6 +120,18 @@ QQmlWebSocket::QQmlWebSocket(QObject *parent) : { } +QQmlWebSocket::QQmlWebSocket(QWebSocket *socket, QObject *parent) : + QObject(parent), + m_status(Closed), + m_url(socket->requestUrl()), + m_isActive(true), + m_componentCompleted(true), + m_errorString(socket->errorString()) +{ + setSocket(socket); + onStateChanged(socket->state()); +} + QQmlWebSocket::~QQmlWebSocket() { } @@ -173,8 +185,19 @@ void QQmlWebSocket::classBegin() void QQmlWebSocket::componentComplete() { - m_webSocket.reset(new (std::nothrow) QWebSocket()); - if (Q_LIKELY(m_webSocket)) { + setSocket(new QWebSocket); + + m_componentCompleted = true; + + open(); +} + +void QQmlWebSocket::setSocket(QWebSocket *socket) +{ + m_webSocket.reset(socket); + if (m_webSocket) { + // explicit ownership via QScopedPointer + m_webSocket->setParent(Q_NULLPTR); connect(m_webSocket.data(), &QWebSocket::textMessageReceived, this, &QQmlWebSocket::textMessageReceived); typedef void (QWebSocket::* ErrorSignal)(QAbstractSocket::SocketError); @@ -182,10 +205,6 @@ void QQmlWebSocket::componentComplete() this, &QQmlWebSocket::onError); connect(m_webSocket.data(), &QWebSocket::stateChanged, this, &QQmlWebSocket::onStateChanged); - - m_componentCompleted = true; - - open(); } } |