// Copyright (C) 2021 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only /*! \example websockets \title QtRemoteObjects WebSockets Applications \brief Using a non-QIODevice-based transport (QWebSocket) with QtRemoteObjects. \examplecategory {Connectivity} \meta tag {rpc,network,websockets} \ingroup qtremoteobjects-examples This example shares a \c QStandardItemModel over a web socket. The model can be edited in the window of the \c wsserver application, and the changes are propagated to the window of the \c wsclient application. This is made possible by implementing a small QIODevice-derived wrapper, \c WebSocketIoDevice, for \c QWebSocket. SSL is used if Qt is compiled with support for it. \image StandardItemTableWindow.webp \section1 The WsServer Application The \c wsserver application creates a \c QStandardItemModel with two columns and inserts data into it. \snippet websockets/wsserver/main.cpp 0 It then starts a \c QWebSocketServer bound to port 8088, and hosts the data model. \snippet websockets/wsserver/main.cpp 1 When handling new connections, SSL is configured if Qt is compiled with support for it. Then a \c WebSocketIoDevice is created using the incoming WebSocketServer connection. \snippet websockets/wsserver/main.cpp 2 A QTreeView is created with the QStandardItemModel as model. Then multiple timers are started with QTimer::singleShot to perform more modifications to the model. \snippet websockets/wsserver/main.cpp 3 \section1 The WsClient Application The \c wsclient application creates a QWebSocket and a \c WebSocketIoDevice taking it as an argument. \snippet websockets/wsclient/main.cpp 0 If Qt is compiled with support for SSL, the client is configured with it. \snippet websockets/wsclient/main.cpp 1 Then a QRemoteObjectNode is created, and setup to use the WebSocketIoDevice. Then it connects to \c wsserver. \snippet websockets/wsclient/main.cpp 2 A QTreeView is created to display the data from the server. The model is acquired from the node, and it is then set as the model of the QTreeView, which is then shown. \snippet websockets/wsclient/main.cpp 3 */