summaryrefslogtreecommitdiff
path: root/examples
Commit message (Collapse)AuthorAgeFilesLines
* Doc: Edit example documentationLeena Miettinen2016-06-027-46/+67
| | | | | | | | | | | | | | - Add images to the examples. - Add instructions for running the examples - Edit for grammar and style - Add dependencies to Qt WebEngine and Qt WebSockets modules - Add a workaround for preventing autolinking of WebChannel, WebEngine and WebSockets to the wrong targets - Use explicit linking where necessary Change-Id: Ia4025284063fa09c9e2a0b2c347ee682bba8a615 Reviewed-by: Topi Reiniö <topi.reinio@theqtcompany.com> (cherry picked from commit 01ea92c7c8d77d3d3c10ab1cc4bf4f214aa07126)
* Merge remote-tracking branch 'origin/5.6' into 5.7v5.7.0-rc1Liang Qi2016-05-198-17/+18
|\ | | | | | | | | | | | | Conflicts: .qmake.conf Change-Id: I52dc7e8ad7a9ce6fa36ad2d6ce5d8ea29b77b400
| * make use of COPIESOswald Buddenhagen2016-04-281-12/+4
| | | | | | | | | | Change-Id: Ic3979ec70b7ddf7d01d0873c00b7739c5f0ef3c9 Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
| * fix example installsOswald Buddenhagen2016-04-287-5/+14
| | | | | | | | | | Change-Id: Iccf9f6e0e9358ba42576fb67a0b356c7414d911e Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* | Merge remote-tracking branch 'origin/5.6' into 5.7v5.7.0-alpha1Liang Qi2016-02-152-4/+12
|\ \ | |/ | | | | | | | | | | Conflicts: .qmake.conf Change-Id: I42bfb38e5a9bf03b43636309fe9e29e8d772bb06
| * Example: Add code to copy the JS file from the resource systemVenugopal Shivashankar2016-01-142-3/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The JS file lives in the src/webchannel directory, and there is a QMake magic in place to copy it to the build directory. But this mechanism fails when the example is run from the Qt binary pkg, which does not include the sources. The JS file must be copied to the build directory either manually or programmatically to run the example. Change-Id: Ib56d9348a8bf1a599e2db5235e0545cd7a8f3bb1 Task-number: QTBUG-46541 Reviewed-by: Topi Reiniö <topi.reinio@theqtcompany.com> Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
| * Example: Modify JavaScript part of the HTMLVenugopal Shivashankar2016-01-042-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The baseUrl that is used to connect to a WebSocket server is derived from the query parameters set to the URL. These parameters are ignored by the QDesktopServices::openUrl implementations specific to Windows and OS X. Ubuntu uses the default implementation that retains the query parameters. This means the browser instance will fail to open the local file URL on Ubuntu because it includes the query parameters, so query parameters should never be set. Moreover, the example creates a QWebSocketServer instance, which is available at ws://localhost:12345, so the it is safe to hardcode the address in the JavaScript. The cleaner approach would be to use a URLHandler as described in http://doc.qt.io/qt-5/qdesktopservices.html#url-handlers, but that complicates the example. Change-Id: I5b5df2b7b816ce0bbfb16a85c036ed379616f04a Task-number: QTBUG-46541 Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* | Updated license headersAntti Kokko2016-01-2015-253/+508
|/ | | | | | | | | | From Qt 5.7 -> examples are lisenced under BSD license, see http://blog.qt.io/blog/2016/01/13/new-agreement-with-the-kde-free-qt-foundation/ Updated license headers to use new BSD header instead of LGPL21 one (in those files which will be under BSD) Change-Id: I67629f4d4480e9ba566d7539d62c7cd4e89342e3 Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
* Remove transports when the underlying socket gets disconnectFrank Meerkoetter2015-08-191-0/+2
| | | | | | | | | This will cause the transport to be removed from the "transports" member of the QQmlWebChannel. Otherwise it would linger around eating resources. Thanks to Jannis Voelker for pointing it out. Change-Id: I5aca499dfd0bdefc075fa5717436ab0919ec6ab1 Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* Fix resource leakFrank Meerkoetter2015-08-191-1/+1
| | | | | | | | The transport owns the socket and should therefore delete it. Kudos to Jannis Voelker for pointing it out. Change-Id: Ie6df93c92e00ac64bc4c329b68cbc9c6598257ab Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* Update copyright headersv5.5.0-alpha1Antti Kokko2015-02-1715-107/+99
| | | | | | | | | Qt copyrights are now in The Qt Company, so we could update the source code headers accordingly. In the same go we should also fix the links to point to qt.io. Change-Id: Iebed549451f58a9fbdd86adf5d0340412d7766d7 Reviewed-by: Jani Heikkinen <jani.heikkinen@theqtcompany.com>
* Merge remote-tracking branch 'origin/5.4' into devFrederik Gladhorn2014-10-2018-10/+824
|\ | | | | | | | | | | | | Conflicts: examples/webchannel/webchannel.pro Change-Id: Ia768202d177a24ae90358b5d88621a5fa88f9002
| * Added some more examplesBernd Lamecker2014-10-1618-10/+823
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Implemented a C++ Server, providing a chatservice through a simple QObject using QWebChannel and also both a QML and HTML Client to interact with the server. The examples show how to use properties, signals and methods, separated in server and clients. This reverts commit e8c280a15f7822fa5a563388615313858fd90848. The integration issues w.r.t. unconditional usage of the websockets module have been resolved. Change-Id: I4a07646dcd5e6050d3bd6b9bd1c5b07dbc7d7d69 Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
| * Revert "Added some more examples"Jani Heikkinen2014-10-1315-634/+8
| | | | | | | | | | | | | | This reverts commit e9ec067e628564e0b065c625dcd7e695857706ac which breaks qt5.git integration Change-Id: I92f23d1c0891ed0e52348ab36b73541027095146 Reviewed-by: Iikka Eklund <iikka.eklund@digia.com>
| * Added some more examplesBernd Lamecker2014-10-1015-8/+634
| | | | | | | | | | | | | | | | | | | | | | Implemented a C++ Server, providing a chatservice through a simple QObject using QWebChannel and also both a QML and HTML Client to interact with the server. The examples show how to use properties, signals and methods, separated in server and clients. Change-Id: I20c84c2104d0bb599ead1771aad499e59657f83e Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* | Added a generic node.js debug client as an exampleSumedha Widyadharma2014-09-195-1/+176
|/ | | | | | | | | qwclient can connect to any qwebchannel server using a websocket transport. The service can then be used through a REPL. It can, for instance, be used with the standalone example server. Change-Id: Ie73d19b0376caf2fcf6ae02ec19a56e27bddfd33 Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* Update license headers and add new licensesJani Heikkinen2014-08-267-126/+70
| | | | | | | | | | | | | | - Renamed LICENSE.LGPL to LICENSE.LGPLv21 - Added LICENSE.LGPLv3 & LICENSE.GPLv2 - Removed LICENSE.GPL Furthermore we need to update the sync.profile to not point to the dev branch in order to integrate this patch in the CI. Change-Id: I06b5496b5d865e2da4808532362616429c969658 Reviewed-by: Sergio Ahumada <sahumada@blackberry.com> Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* Doc: Edited links JavaScript API page and other documentation fixes.Jerome Pasion2014-08-231-2/+4
| | | | | | | | | The JavaScript API page is important to the rest of the documentation but there was no link to it. Task-number: QTBUG-40756 Change-Id: Id741a67ac2b57e21da548c2961c622c7516ac8cf Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* Doc: Add extensions used by example files to .qdocconfTopi Reinio2014-08-211-2/+2
| | | | | | | | | | | As the examples include files with extension that are not included in the global Qt documentation config, add them to the module's .qdocconf to get the files listed in the example documentation pages. Change-Id: Ifc3bf473b67d6acc795ce3f951f0c5269d69b69c Task-number: QTBUG-40831 Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* Doc: Fix example documentation and pathsTopi Reinio2014-08-1318-53/+8
| | | | | | | | | | | | | | | To fix issues related to example documentation and to follow Qt convention, do the following changes: - Rename examples/qwebchannel to examples/webchannel - Move example-specific documentation to correct location(s) - Include generic 'Running the Example' instructions - Add the module name to example title, fix links This ensures that example docs are built and the example manifest file generated correctly. Change-Id: I284e0b13db95a6738d72258735018b59156cc7da Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* Added a nodeJS exampleOswald Buddenhagen2014-08-076-1/+167
| | | | | | | | | | This is a small sample of a command line chat client which shows how to use QWebChannel with NodeJS. See included readme for instructions on how to execute it. A known port has been introduced to make this work. Change-Id: If430703f8c2267df758df9d5978509675c8aea9d Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* Make standalone example mostly self-contained.Milian Wolff2014-08-074-4/+38
| | | | | | | | | | | | | Install qwebchannel.js file and also copy it to the build dir. This makes the examples subdirectory self-contained and useable when compiling it from the install directory. Making individual examples self-contained would cause too much code duplication, so it was not done. Change-Id: Ifeb5eac7d05b92779d24cb4da413f3fb173f992d Reviewed-by: Sumedha Widyadharma <sumedha.widyadharma@basyskom.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
* Fix js src path in HTML chat clientSumedha Widyadharma2014-08-011-1/+1
| | | | | | Change-Id: I0a0e05cf1a6e36a7c9b26dfbe5fc083cd5d0ad2b Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com> Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* Install missing index.html for standalone exampleSumedha Widyadharma2014-08-011-0/+2
| | | | | Change-Id: I908f06bdcea1dfa422cf70817df48cdb1d290690 Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
* Add documentation for the QtWebChannel module.Milian Wolff2014-08-0113-5/+161
| | | | | | | | | | | Please proof-read it and tell me what needs to be improved. I assume most people will probably not use the QWebChannel directly. Rather, they will only consume its features indirectly through the integration in QtWebKit/QtWebEngine. Thus the documentation here is for QWebChannel as a library. User-end documentation should be added to QtWebKit, I think. Change-Id: I259c204e24331271b8dc74ea11695988234a79d3 Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
* Refactor JavaScript QWebChannel to take an external transport object.Milian Wolff2014-07-301-20/+37
| | | | | | | | | | | This assimilates the JavaScript side to the QML/C++ side. We get rid of the automagic WebSocket code. Instead, users pass in the WebSocket from the outside, if they want to use that for communication. In the QtWebKit/QtWebEngine cases, we will pass in our custom IPC objects. Change-Id: I15e15b5130f99dc8b39dfbfa8cd3d8b2d34dbbc0 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@digia.com> Reviewed-by: Lutz Schönemann <lutz.schoenemann@basyskom.com>
* Refactor and streamline API and IPC protocol.Milian Wolff2014-07-292-3/+26
| | | | | | | | | | | | | | | This patch removes the obsolete API support to send raw messages using a QWebChannel. Instead, it is encouraged to directly use WebSockets or navigator.qt. By doing so, we can cleanup the code considerably. While at it, the transport API is adapted to work on QJsonObject messages, instead of QStrings. This will allow us to use more efficient formats in e.g. QtWebKit or QtWebEngine. One could also implement a JSONRPC interface using a custom transport then. Change-Id: Ia8c125a5558507b3cbecf128a46b19fdb013f47b Reviewed-by: Allan Sandfeld Jensen <allan.jensen@digia.com>
* The standalone example depends on QtWidgetsSumedha Widyadharma2014-07-241-1/+1
| | | | | | | This fixes builds with Qt built without the widgets module. Change-Id: I280b1443c3333d9d199d0b4fe7ee43bffb9c5e6e Reviewed-by: Simo Fält <simo.falt@digia.com>
* Only depend optionally on QtWebSockets, and only use it in the example.Milian Wolff2014-07-048-54/+332
| | | | | | | | | | | | | The utility QWebChannelAbstractTransport implementation based on the QtWebSocket has no big value. Instead, it would pull in the QtWebSocket link-time dependency into QtWebKit/QtWebEngine, which is not desired. Considering that the WebSocket usecase is minor, and only few people will ever use it, we agreed that having the code in the example alone is enough. Change-Id: Ica038329a1d684f33e805fc296e9dff71b1446ba Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com> Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
* Refactor code to use QWebChannelAbstractTransport and QtWebSockets.Milian Wolff2014-07-045-194/+47
| | | | | | | | | | | | | | | | | | | | | | This is a quite big changeset, but necessary to get the roadmap implemented that was discussed at QtCS. With this patchset landed, the QWebChannel does not depend on QtWebKit anymore, not even for the tests. Rather, we will introduce the dependency in the other way (i.e. QtWebKit will optionally use QtWebChannel if available). For the pure Qt/C++ use-case, we ship a utility implementation of a QWebChannelAbstractTransport that uses a QWebSocket for the server-client communication. This way, we can get rid of the custom WebSocket implementation. The tests are refactored to run the qwebchannel.js code directly inside QML. Integration tests for QtWebKit/QtWebEngine as well as examples will be added to these repositories. Change-Id: Icc1c1c5918ec46e31d5070937c14c4ca25a3e2d6 Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
* Change destruction order to fix crash on close.Milian Wolff2014-02-061-1/+1
| | | | | | | | The transport interface should outlive the web channel or unregister itself before being destroyed. Change-Id: I77eaa26a4e1985d83cc3f19d07830cf0ca48ee7c Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Make the underlying transport mechanism of the webchannel pluggable.Milian Wolff2014-02-063-8/+14
| | | | | | | | | | | | | | | | | | | | | This enables us to optionally use navigator.qt instead of a WebSocket, which is nicer setup-wise and is also slightly faster: navigator.qt: 284.0 msecs per iteration (total: 2,840, iterations: 10) WebSocket: 295.8 msecs per iteration (total: 2,959, iterations: 10) The baseline is ca. 203 msecs, which would mean a performance boost of ca. 12.7%. Furthermore, this sets the fundation to eventually add a WebEngine transport mechanism. The WebViewTransport should also be removed and instead the WebView itself should directly implement the WebChannelTransportInterface. Change-Id: I368bb27e38ffa2f17ffeb7f5ae695690f6f5ad21 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Mark QtWebKit as optional module dependency.Milian Wolff2014-01-311-1/+1
| | | | | | | | | | | | | | The current CI system fails to build the webchannel when QtWebKit is included in sync.profile, so we ignore it for now and adapt the QMake build system to only include the declarative tests when webkit is found. As discussed with tronical, sifalt and sahumada, the qtqa scripts will need to be adapted to cope with optional dependencies of non-qt5 modules. Change-Id: Id89b763ef2697e9e72eb4064c150971b13ebccc3 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Add QML WebKit example which can be run with qmlscene.Milian Wolff2014-01-313-0/+176
| | | | | | | | | | | | It depends on QtQuickControls for layouting of the QML server side and uses an HTML page similar to the one used by the existing standalone example. The example itself uses the simple raw message passing and simulates a chat app between QML server and HTML client. Change-Id: Ib4ce39ca736febb82a7d56bef4501888b8c06bc7 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Remove examples written by Noam which are under the Nokia license.Milian Wolff2014-01-1617-859/+0
| | | | | | | I'll write new examples from scratch using the proper license. Change-Id: If13e57cf8b19cf45178b6fccace59cb56410d84e Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Fixup license headers of the files written by me.Milian Wolff2014-01-161-3/+2
| | | | | | | | | | | | Some tests referenced Nokia in their license even though that was never the case. The tests where written completely by me after Qt Nokia times. What is missing are the examples which are still mostly original work by Noam back then in Nokia times. The rest was (re-)written by me completely since then anyways. Change-Id: Ib423fb3459bcc1f7464a02de4fd82ddfd614d282 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Add declarative object-registration API to QML WebChannel.Milian Wolff2014-01-101-9/+7
| | | | | | | | | | | | The new registeredObjects list property is now preferred over the old imparative registerObject/registerObjects API. Items that are added to the list need an attached WebChannel.id property which holds the identifier under which the object is published to remote clients. Change-Id: I96a8047b9a85e27f3fd48c900180c22ebd20eb35 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Simplify usage of QWebChannel on the server side.Milian Wolff2014-01-082-20/+2
| | | | | | | | | | | This is achieved by hiding the MetaObjectPublisher completely as private API. The QWebChannel is the only publisher API and now handles both the socket as well as the publisher internally. This now allows us to create a proper QML api in the new QmlWebChannel. Change-Id: I3096364af8485353ca9bc19df4a81a8e4552c3d7 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Fixup and cleanup examples to make them work properly.Milian Wolff2014-01-088-13/+35
| | | | | | | | | This fixes some regressions introduced by previous commits and ensures that the examples work as intended. While at it, the code is cleaned up a bit by using resources instead of referencing files in the source dir. Change-Id: I01da305429dcdebcb96284b7110c59f3090b2201 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Simplify QWebChannel usage by merging webchannel.js and qobject.js.Milian Wolff2014-01-084-30/+21
| | | | | | | | | | | The code now resides in a single qwebchannel.js file and there is only a single callback-nesting required to setup a MetaObjectPublisher connection. The server-side will be simplified in the next step. Change-Id: Ib5fc77a03c2b281c61af91713411eed571ec6108 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Fix assertion at shutdown or on QObject destruction.Milian Wolff2014-01-081-2/+2
| | | | | | | | | | When handling the destroyed signal of a QObject, the QMetaObject of the sender() will point to the global static QObject meta object. Thus, we also cache its signal argument types. This way, we are able to properly handle the destroyed signal with minimum effort. Change-Id: Iba1a3fc94d55adad178302cc847fd4285815e689 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Add standalone C++/Qt example which opens HTML client in a browser.Milian Wolff2013-12-205-0/+247
| | | | | | | | | | | | | This example shows how to use the (currently quite ugly) raw C++ API to setup a webchannel without using QML at all. The HTML client is then handled by the users default browser. The example itself shows a simple chat between the HTML client and the C++/Qt server, with a line edit for input and a text edit showing the chat history. Change-Id: I8baf14efb9d0c5f5880d99710cf6317fe9b887b9 Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
* Restructure sources and assimilate to Qt module structure.Milian Wolff2013-12-124-8/+8
| | | | | | | | | | | | | | | | | | | | | This module can hopefully be done in time for 5.3. This commit changes the source structure and QMake files to adapt to typical Qt modules. With this in place, we can now use QT += webchannel in qmake files to link against the pure Qt/C++ QtWebChannel library. The QML plugin is separated from it and can be loaded optionally, if the quick module could be found. Also added is now a qmlplugindump for tooling integration. Note that the Qt.labs namespace is removed. The test file structure is also adapted to how its done in the QtDeclarative module. Note that this setup apparently does not support to run tests without running make install first. Change-Id: I1c15d72e7ab5f525d5a6f651f4e965ef86bc17bd Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Cleanup sources, mostly by removing QtCreator generated bloat.Milian Wolff2013-11-1426-1065/+92
| | | | | | | | | | | | | | This removes a lot of obsolete files and simplifies the build system of the examples. Furthermore, the examples can now be run without running make install first. It reuses the same import path as the test does. Note that the examples are not installable anymore now though. If this is required, it can be added again. Change-Id: Ic7ff80f734b035a03fb1a11a2df492c97298ceff Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
* Remove obsolete CONFIG+=ordered from qmake files.Milian Wolff2013-11-131-1/+0
| | | | | Change-Id: Ide09c6f218bf7af176e03e4741f29cd022f351b8 Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
* Make it possible to wrap QObject's on the fly.Milian Wolff2013-11-015-51/+107
| | | | | | | | This is required for factory-like methods on the C++/QML side, which we want to access from the HTML side as well. Change-Id: I2852bbc9c8effb6d6f49b5be784241a6e2320823 Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
* Make it possible to start the examples from a different dir.Milian Wolff2013-11-012-2/+2
| | | | | Change-Id: I0a640ee38d642670211b7cae30619fc18307b688 Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
* Greatly optimize WebChannel in various ways.Milian Wolff2013-11-013-2/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a big code drop - sorry for that. The benefits are worth it though, I'm sure. The optimizations were required to make the WebChannel useable even on a low-end embedded device with medium amount of traffic. The changes in this patch can be grouped into different parts: a) Do more in C++: Esp. by leveraging e.g. the new classInfoForObjects in QtMetaObjectPublisher (on the C++ side) one can greatly reduce the time required for initialization of the webchannel. b) Property Caching: Instead of requiring a socket roundtrip whenever a property is read on the HTML side, we now cache the property values on the HTML side. Note that for this to work properly, one needs to add proper notify signals to the property declarations, as otherwise the cache will not get updated. c) Grouping: Instead of sending separate messages to the clients for every property update, these signals are grouped by a 50ms timer, and then send aggregated to the client. This reduces the socket traffic, as more boiler plate can be shared. d) Compression: Some data was previously send repeatedly, such as property name and notify signal. This is now compressed internally where possible (i.e. for the ${propName}Changed naming scheme). e) Message Flood Prevention: Previously, one could easily flood an HTML client by sending data to it. If it could not work off the incoming stream one would freeze the HTML client. Now, we wait for an idle signal of the client prior to sending new data to it. Paired with the message grouping and property cache mentioned above, we are able to only send the newest data once the HTML client becomes active again. I.e. we discard now-obsolete property updates etc. Change-Id: I8f3ae16ed6c1f6a89b644acdce7efbf0f07fc786 Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
* Allow IP's in base url.Milian Wolff2013-11-013-3/+3
| | | | | Change-Id: I2e20aa13a598e65eafa9b9c145931a95e5f51a0e Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
* Refactor QWebChannel to use a custom WebSocket server implementation.Milian Wolff2013-11-016-72/+110
| | | | | | | | | | | | | | | The code is much simpler in my opinion and much faster and far more stable. Especially the timer issues or multiple signal connects are now properly resolved. Also simplify the QML WebChannel API: - Rename slot to sendRawMessage and signal to rawMessageReceived - Add a QML helper that has a respond and sendMessage method that transforms the input to the expected JSON format. Change-Id: Ic3266329d1a2877bd46227e4ad70b88dc340d289 Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>