ImagingTools Core SDK
CQmlWebSocket.h
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ImtCore-Commercial
2#pragma once
3
4
5// Qt includes
6#include <QtCore/QObject>
7#include <QtWebSockets/QWebSocket>
8#include <QSslError>
9#include <QtCore/QUrl>
10
11
12namespace imtqml
13{
14
15
16class CQmlWebSocket : public QObject
17{
18 Q_OBJECT
19 Q_PROPERTY(QUrl url READ url WRITE setUrl NOTIFY urlChanged)
20 Q_PROPERTY(bool active READ isActive WRITE setActive NOTIFY activeChanged)
21 Q_PROPERTY(QString errorString READ errorString NOTIFY errorStringChanged)
22 Q_PROPERTY(QString negotiatedSubprotocol READ negotiatedSubprotocol NOTIFY negotiatedSubprotocolChanged)
23 Q_PROPERTY(QStringList requestedSubprotocols READ requestedSubprotocols WRITE setRequestedSubprotocols NOTIFY requestedSubprotocolsChanged)
24 Q_PROPERTY(Status status READ status NOTIFY statusChanged)
25
26public:
27 enum Status
28 {
29 Connecting,
30 Open,
31 Closing,
32 Closed,
33 Error
34 };
35 Q_ENUM(Status)
36
37 explicit CQmlWebSocket(QObject* parent = nullptr);
38
39 QUrl url() const;
40 void setUrl(const QUrl& url);
41
42 bool isActive() const;
43 void setActive(bool isActive);
44
45 QString errorString() const;
46 QString negotiatedSubprotocol() const;
47 QStringList requestedSubprotocols() const;
48 void setRequestedSubprotocols(const QStringList& protocols);
49
50 Status status() const;
51
52 Q_INVOKABLE void sendTextMessage(const QString& message);
53 Q_INVOKABLE void sendBinaryMessage(const QByteArray& message);
54
55signals:
56 void binaryMessageReceived(const QString& message);
57 void textMessageReceived(const QString& message);
58 void statusChanged(Status status);
59 void activeChanged();
60 void errorStringChanged();
61 void negotiatedSubprotocolChanged();
62 void requestedSubprotocolsChanged();
63 void urlChanged();
64 void sslErrors(const QList<QSslError>& errors);
65
66private slots:
67 void onConnected();
68 void onDisconnected();
69 void onError(QAbstractSocket::SocketError error);
70 void onSslErrors(const QList<QSslError>& errors);
71
72private:
73 void updateStatus();
74
75 QWebSocket m_socket;
76 QUrl m_url;
77 QStringList m_requestedSubprotocols;
78 Status m_status = Closed;
79};
80
81
82} // namespace imtqml
83
84