diff options
| author | Thomas Vanbesien <tvanbesi@proton.me> | 2026-02-17 23:58:08 +0100 |
|---|---|---|
| committer | Thomas Vanbesien <tvanbesi@proton.me> | 2026-02-17 23:58:08 +0100 |
| commit | 343169dff6b062074fd3c4a5e240b449ffc4a449 (patch) | |
| tree | a2ef1edc8dd1b1c1dbac757192fa681d8ec76717 /src/BobinkClient.h | |
| download | BobinkQtOpcUa-343169dff6b062074fd3c4a5e240b449ffc4a449.tar.gz BobinkQtOpcUa-343169dff6b062074fd3c4a5e240b449ffc4a449.zip | |
Initial Bobink library: BobinkAuth, BobinkClient, and demo app
Implements the core OPC UA wrapper library with:
- Build system with automatic dep building (open62541, QtOpcUa)
- BobinkAuth: QML auth component (anonymous/userpass/certificate)
- BobinkClient: QML singleton managing connection, LDS discovery,
PKI configuration, endpoint selection, and certificate trust flow
- Demo app for manual testing of the full connection flow
Diffstat (limited to 'src/BobinkClient.h')
| -rw-r--r-- | src/BobinkClient.h | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/src/BobinkClient.h b/src/BobinkClient.h new file mode 100644 index 0000000..b8e5624 --- /dev/null +++ b/src/BobinkClient.h @@ -0,0 +1,123 @@ +#ifndef BOBINKCLIENT_H +#define BOBINKCLIENT_H + +#include <QEventLoop> +#include <QObject> +#include <QOpcUaApplicationDescription> +#include <QOpcUaClient> +#include <QOpcUaEndpointDescription> +#include <QOpcUaErrorState> +#include <QOpcUaPkiConfiguration> +#include <QOpcUaProvider> +#include <QQmlEngine> +#include <QTimer> + +class BobinkAuth; + +class BobinkClient : public QObject +{ + Q_OBJECT + QML_ELEMENT + QML_SINGLETON + + Q_PROPERTY (bool connected READ connected NOTIFY connectedChanged) + Q_PROPERTY (QString serverUrl READ serverUrl WRITE setServerUrl NOTIFY + serverUrlChanged) + Q_PROPERTY (BobinkAuth *auth READ auth WRITE setAuth NOTIFY authChanged) + + Q_PROPERTY (QString discoveryUrl READ discoveryUrl WRITE setDiscoveryUrl + NOTIFY discoveryUrlChanged) + Q_PROPERTY (int discoveryInterval READ discoveryInterval WRITE + setDiscoveryInterval NOTIFY discoveryIntervalChanged) + Q_PROPERTY (bool discovering READ discovering NOTIFY discoveringChanged) + Q_PROPERTY (QVariantList servers READ servers NOTIFY serversChanged) + + Q_PROPERTY (QString pkiDir READ pkiDir WRITE setPkiDir NOTIFY pkiDirChanged) + +public: + explicit BobinkClient (QObject *parent = nullptr); + ~BobinkClient () override; + + static BobinkClient *instance (); + static BobinkClient *create (QQmlEngine *qmlEngine, QJSEngine *jsEngine); + + bool connected () const; + + QString serverUrl () const; + void setServerUrl (const QString &url); + + BobinkAuth *auth () const; + void setAuth (BobinkAuth *auth); + + QOpcUaClient *opcuaClient () const; + + QString discoveryUrl () const; + void setDiscoveryUrl (const QString &url); + + int discoveryInterval () const; + void setDiscoveryInterval (int ms); + + bool discovering () const; + + const QList<QOpcUaApplicationDescription> &discoveredServers () const; + QVariantList servers () const; + + QString pkiDir () const; + void setPkiDir (const QString &path); + + Q_INVOKABLE void connectToServer (); + Q_INVOKABLE void disconnectFromServer (); + Q_INVOKABLE void acceptCertificate (); + Q_INVOKABLE void rejectCertificate (); + + Q_INVOKABLE void startDiscovery (); + Q_INVOKABLE void stopDiscovery (); + Q_INVOKABLE void applyPki (); + +signals: + void connectedChanged (); + void serverUrlChanged (); + void authChanged (); + void certificateTrustRequested (const QString &certInfo); + void connectionError (const QString &message); + + void discoveryUrlChanged (); + void discoveryIntervalChanged (); + void discoveringChanged (); + void serversChanged (); + void pkiDirChanged (); + +private slots: + void handleStateChanged (QOpcUaClient::ClientState state); + void + handleEndpointsReceived (const QList<QOpcUaEndpointDescription> &endpoints, + QOpcUa::UaStatusCode statusCode, + const QUrl &requestUrl); + void handleConnectError (QOpcUaErrorState *errorState); + void handleFindServersFinished ( + const QList<QOpcUaApplicationDescription> &servers, + QOpcUa::UaStatusCode statusCode, const QUrl &requestUrl); + void doDiscovery (); + +private: + void setupClient (); + + static BobinkClient *s_instance; + QOpcUaProvider *m_provider = nullptr; + QOpcUaClient *m_client = nullptr; + BobinkAuth *m_auth = nullptr; + QString m_serverUrl; + bool m_connected = false; + QEventLoop *m_certLoop = nullptr; + bool m_certAccepted = false; + + QString m_discoveryUrl; + int m_discoveryInterval = 10000; + QTimer m_discoveryTimer; + bool m_discovering = false; + QList<QOpcUaApplicationDescription> m_discoveredServers; + + QString m_pkiDir; +}; + +#endif // BOBINKCLIENT_H |
