From 343169dff6b062074fd3c4a5e240b449ffc4a449 Mon Sep 17 00:00:00 2001 From: Thomas Vanbesien Date: Tue, 17 Feb 2026 23:58:08 +0100 Subject: 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 --- src/BobinkClient.h | 123 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 src/BobinkClient.h (limited to 'src/BobinkClient.h') 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include + +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 &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 &endpoints, + QOpcUa::UaStatusCode statusCode, + const QUrl &requestUrl); + void handleConnectError (QOpcUaErrorState *errorState); + void handleFindServersFinished ( + const QList &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 m_discoveredServers; + + QString m_pkiDir; +}; + +#endif // BOBINKCLIENT_H -- cgit v1.2.3