summaryrefslogtreecommitdiff
path: root/examples/standalone/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/standalone/main.cpp')
-rw-r--r--examples/standalone/main.cpp60
1 files changed, 46 insertions, 14 deletions
diff --git a/examples/standalone/main.cpp b/examples/standalone/main.cpp
index 47f7ea2..05deb24 100644
--- a/examples/standalone/main.cpp
+++ b/examples/standalone/main.cpp
@@ -40,7 +40,6 @@
****************************************************************************/
#include "qwebchannel.h"
-#include "qwebsockettransport.h"
#include <QApplication>
#include <QDialog>
@@ -49,6 +48,10 @@
#include <QUrl>
#include <QDebug>
+#include <QtWebSockets/QWebSocketServer>
+#include <QtWebSockets/QWebSocket>
+#include <QtWebChannel/QWebChannelWebSocketTransport>
+
#include "ui_dialog.h"
class Dialog : public QObject
@@ -56,15 +59,18 @@ class Dialog : public QObject
Q_OBJECT
public:
- explicit Dialog(QWebSocketTransport *transport, QObject *parent = 0)
+ explicit Dialog(const QString &baseUrl, QObject *parent = 0)
: QObject(parent)
{
ui.setupUi(&dialog);
dialog.show();
connect(ui.send, SIGNAL(clicked()), SLOT(clicked()));
- connect(transport, SIGNAL(baseUrlChanged(QString)),
- SLOT(baseUrlChanged(QString)));
+
+ QUrl url = QUrl::fromLocalFile(SOURCE_DIR "/index.html");
+ url.setQuery(QStringLiteral("webChannelBaseUrl=") + baseUrl);
+ ui.output->appendPlainText(tr("Initialization complete, opening browser at %1.").arg(url.toDisplayString()));
+ QDesktopServices::openUrl(url);
}
signals:
@@ -91,29 +97,55 @@ private slots:
ui.input->clear();
}
- void baseUrlChanged(const QString &baseUrl)
+private:
+ QDialog dialog;
+ Ui::Dialog ui;
+};
+
+// boiler plate code to connect incoming WebSockets to the WebChannel, such that they receive
+// messages and can access the published objects.
+class TransportHandler : public QObject
+{
+ Q_OBJECT
+
+public:
+ TransportHandler(QWebChannel *channel, QObject *parent = 0)
+ : QObject(parent)
+ , m_server(QStringLiteral("QWebChannel Standalone Example Server"), QWebSocketServer::NonSecureMode)
+ , m_channel(channel)
+ {
+ if (!m_server.listen(QHostAddress::LocalHost)) {
+ qFatal("Failed to open web socket server.");
+ }
+
+ connect(&m_server, &QWebSocketServer::newConnection,
+ this, &TransportHandler::handleNewConnection);
+ }
+
+ QString baseUrl() const
{
- ui.output->appendPlainText(tr("Initialization complete, opening browser."));
+ return m_server.serverUrl().toString();
+ }
- QUrl url = QUrl::fromLocalFile(SOURCE_DIR "/index.html");
- url.setQuery(QStringLiteral("webChannelBaseUrl=") + baseUrl);
- QDesktopServices::openUrl(url);
+private slots:
+ void handleNewConnection()
+ {
+ m_channel->connectTo(new QWebChannelWebSocketTransport(m_server.nextPendingConnection()));
}
private:
- QDialog dialog;
- Ui::Dialog ui;
+ QWebSocketServer m_server;
+ QWebChannel *m_channel;
};
int main(int argc, char** argv)
{
QApplication app(argc, argv);
- QWebSocketTransport transport;
QWebChannel channel;
- channel.connectTo(&transport);
+ TransportHandler transportHandler(&channel);
- Dialog dialog(&transport);
+ Dialog dialog(transportHandler.baseUrl());
channel.registerObject(QStringLiteral("dialog"), &dialog);