Revision control

// Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Milian Wolff <milian.wolff@kdab.com>
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "dialog.h"
#include "core.h"
+ #include "httpserver.h"
#include "websocketclientwrapper.h"
#include "websockettransport.h"
#include <QApplication>
+ #include <QByteArray>
#include <QDesktopServices>
#include <QDialog>
- #include <QDir>
- #include <QFileInfo>
+ #include <QFile>
+ #include <QHostAddress>
#include <QUrl>
#include <QWebChannel>
#include <QWebSocketServer>
+ namespace {
+
+ QByteArray readResource(const QString &path)
+ {
+ QFile file(path);
+ if (!file.open(QIODevice::ReadOnly))
+ qFatal("Missing embedded resource: %s", qPrintable(path));
+ return file.readAll();
+ }
+
+ } // namespace
+
int main(int argc, char** argv)
{
QApplication app(argc, argv);
// setup the QWebSocketServer
QWebSocketServer server(QStringLiteral("QWebChannel Standalone Example Server"), QWebSocketServer::NonSecureMode);
if (!server.listen(QHostAddress::LocalHost, 12345)) {
qFatal("Failed to open web socket server.");
return 1;
}
+ // serve the index.html page and its qwebchannel.js over loopback address
+ HttpServer httpServer({
+ { QByteArrayLiteral("/"),
+ { QByteArrayLiteral("text/html"), readResource(QStringLiteral(":/index.html")) } },
+ { QByteArrayLiteral("/qwebchannel.js"),
+ { QByteArrayLiteral("text/javascript"), readResource(QStringLiteral(":/qwebchannel.js")) } },
+ });
+ if (!httpServer.listen())
+ return 1;
+
// wrap WebSocket clients in QWebChannelAbstractTransport objects
WebSocketClientWrapper clientWrapper(&server);
// setup the channel
QWebChannel channel;
QObject::connect(&clientWrapper, &WebSocketClientWrapper::clientConnected,
&channel, &QWebChannel::connectTo);
// setup the UI
Dialog dialog;
// setup the core and publish it to the QWebChannel
Core core(&dialog);
channel.registerObject(QStringLiteral("core"), &core);
// open a browser window with the client HTML page
- QUrl url = QUrl::fromLocalFile(BUILD_DIR "/index.html");
+ const QUrl url(QStringLiteral("http://127.0.0.1:%1/").arg(httpServer.port()));
QDesktopServices::openUrl(url);
dialog.displayMessage(Dialog::tr("Initialization complete, opening browser at %1.").arg(url.toDisplayString()));
dialog.show();
return app.exec();
}