From 094b8aa2bbb8b90dff9da199873cbc6b36549eb6 Mon Sep 17 00:00:00 2001 From: Thomas Vanbesien Date: Wed, 11 Mar 2026 15:25:11 +0100 Subject: Refactor: three XPL2 ports, EchoServer class, dark debug console, qmllint clean - Xpl2Client: replace single port with commandPort/imagingPort/statusPort (9110/9111/9112) - Mock server: extract EchoServer class from lambda-based listenOn() - Demo: dark debug console matching BobinkQtOpcUa style, 2-column connection layout - Fix qmlls module resolution via IMPORT_PATH in qt_add_qml_module() - Add pragma ComponentBehavior: Bound, fix all qmllint warnings --- src/Xpl2Client.cpp | 159 ++++++++++++++++++++++++++++++++++++----------------- src/Xpl2Client.h | 66 +++++++++++++--------- 2 files changed, 150 insertions(+), 75 deletions(-) (limited to 'src') diff --git a/src/Xpl2Client.cpp b/src/Xpl2Client.cpp index db53792..8ed032f 100644 --- a/src/Xpl2Client.cpp +++ b/src/Xpl2Client.cpp @@ -4,83 +4,142 @@ */ #include "Xpl2Client.h" -Xpl2Client::Xpl2Client(QObject *parent) : QObject(parent) { - connect(&m_socket, &QTcpSocket::connected, this, &Xpl2Client::onConnected); - connect(&m_socket, &QTcpSocket::disconnected, this, - &Xpl2Client::onDisconnected); - connect(&m_socket, &QTcpSocket::readyRead, this, &Xpl2Client::onReadyRead); - connect(&m_socket, &QAbstractSocket::errorOccurred, this, - &Xpl2Client::onErrorOccurred); +Xpl2Client::Xpl2Client (QObject *parent) : QObject (parent) +{ + connect (&m_socket, &QTcpSocket::connected, this, &Xpl2Client::onConnected); + connect (&m_socket, &QTcpSocket::disconnected, this, + &Xpl2Client::onDisconnected); + connect (&m_socket, &QTcpSocket::readyRead, this, &Xpl2Client::onReadyRead); + connect (&m_socket, &QAbstractSocket::errorOccurred, this, + &Xpl2Client::onErrorOccurred); } -QString Xpl2Client::host() const { return m_host; } +QString +Xpl2Client::host () const +{ + return m_host; +} -void Xpl2Client::setHost(const QString &host) { +void +Xpl2Client::setHost (const QString &host) +{ if (m_host == host) return; m_host = host; - emit hostChanged(); + emit hostChanged (); } -quint16 Xpl2Client::port() const { return m_port; } +quint16 +Xpl2Client::commandPort () const +{ + return m_commandPort; +} -void Xpl2Client::setPort(quint16 port) { - if (m_port == port) +void +Xpl2Client::setCommandPort (quint16 port) +{ + if (m_commandPort == port) return; - m_port = port; - emit portChanged(); + m_commandPort = port; + emit commandPortChanged (); } -bool Xpl2Client::isConnected() const { - return m_socket.state() == QAbstractSocket::ConnectedState; +quint16 +Xpl2Client::imagingPort () const +{ + return m_imagingPort; } -void Xpl2Client::connectToServer() { - if (isConnected()) { - emit statusMessage(QStringLiteral("Already connected")); +void +Xpl2Client::setImagingPort (quint16 port) +{ + if (m_imagingPort == port) return; - } - emit statusMessage( - QStringLiteral("Connecting to %1:%2…").arg(m_host).arg(m_port)); - m_socket.connectToHost(m_host, m_port); + m_imagingPort = port; + emit imagingPortChanged (); } -void Xpl2Client::disconnectFromServer() { - if (!isConnected()) +quint16 +Xpl2Client::statusPort () const +{ + return m_statusPort; +} + +void +Xpl2Client::setStatusPort (quint16 port) +{ + if (m_statusPort == port) return; - m_socket.disconnectFromHost(); + m_statusPort = port; + emit statusPortChanged (); +} + +bool +Xpl2Client::isConnected () const +{ + return m_socket.state () == QAbstractSocket::ConnectedState; +} + +void +Xpl2Client::connectToServer () +{ + if (isConnected ()) + { + emit statusMessage (QStringLiteral ("Already connected")); + return; + } + emit statusMessage (QStringLiteral ("Connecting to %1:%2…") + .arg (m_host) + .arg (m_commandPort)); + m_socket.connectToHost (m_host, m_commandPort); } -void Xpl2Client::sendCommand(const QString &command) { - if (!isConnected()) { - emit errorOccurred(QStringLiteral("Not connected")); +void +Xpl2Client::disconnectFromServer () +{ + if (!isConnected ()) return; - } - QByteArray data = command.toUtf8() + '\n'; - m_socket.write(data); - emit statusMessage(QStringLiteral("Sent: %1").arg(command)); + m_socket.disconnectFromHost (); +} + +void +Xpl2Client::sendCommand (const QString &command) +{ + if (!isConnected ()) + { + emit errorOccurred (QStringLiteral ("Not connected")); + return; + } + QByteArray data = command.toUtf8 () + '\n'; + m_socket.write (data); + emit statusMessage (QStringLiteral ("Sent: %1").arg (command)); } -void Xpl2Client::onConnected() { - emit connectedChanged(); - emit statusMessage(QStringLiteral("Connected to %1:%2") - .arg(m_socket.peerName()) - .arg(m_socket.peerPort())); +void +Xpl2Client::onConnected () +{ + emit connectedChanged (); } -void Xpl2Client::onDisconnected() { - emit connectedChanged(); - emit statusMessage(QStringLiteral("Disconnected")); +void +Xpl2Client::onDisconnected () +{ + emit connectedChanged (); } -void Xpl2Client::onReadyRead() { - while (m_socket.canReadLine()) { - QString line = QString::fromUtf8(m_socket.readLine()).trimmed(); - emit responseReceived(line); - } +void +Xpl2Client::onReadyRead () +{ + while (m_socket.canReadLine ()) + { + QString line = QString::fromUtf8 (m_socket.readLine ()).trimmed (); + emit responseReceived (line); + } } -void Xpl2Client::onErrorOccurred(QAbstractSocket::SocketError error) { - Q_UNUSED(error) - emit errorOccurred(m_socket.errorString()); +void +Xpl2Client::onErrorOccurred (QAbstractSocket::SocketError error) +{ + Q_UNUSED (error) + emit errorOccurred (m_socket.errorString ()); } diff --git a/src/Xpl2Client.h b/src/Xpl2Client.h index f052962..d339bc3 100644 --- a/src/Xpl2Client.h +++ b/src/Xpl2Client.h @@ -8,46 +8,62 @@ #include #include -class Xpl2Client : public QObject { +class Xpl2Client : public QObject +{ Q_OBJECT QML_ELEMENT QML_SINGLETON - Q_PROPERTY(QString host READ host WRITE setHost NOTIFY hostChanged) - Q_PROPERTY(quint16 port READ port WRITE setPort NOTIFY portChanged) - Q_PROPERTY(bool connected READ isConnected NOTIFY connectedChanged) + Q_PROPERTY (QString host READ host WRITE setHost NOTIFY hostChanged) + Q_PROPERTY (quint16 commandPort READ commandPort WRITE setCommandPort NOTIFY + commandPortChanged) + Q_PROPERTY (quint16 imagingPort READ imagingPort WRITE setImagingPort NOTIFY + imagingPortChanged) + Q_PROPERTY (quint16 statusPort READ statusPort WRITE setStatusPort NOTIFY + statusPortChanged) + Q_PROPERTY (bool connected READ isConnected NOTIFY connectedChanged) public: - explicit Xpl2Client(QObject *parent = nullptr); + explicit Xpl2Client (QObject *parent = nullptr); - QString host() const; - void setHost(const QString &host); + QString host () const; + void setHost (const QString &host); - quint16 port() const; - void setPort(quint16 port); + quint16 commandPort () const; + void setCommandPort (quint16 port); - bool isConnected() const; + quint16 imagingPort () const; + void setImagingPort (quint16 port); - Q_INVOKABLE void connectToServer(); - Q_INVOKABLE void disconnectFromServer(); - Q_INVOKABLE void sendCommand(const QString &command); + quint16 statusPort () const; + void setStatusPort (quint16 port); + + bool isConnected () const; + + Q_INVOKABLE void connectToServer (); + Q_INVOKABLE void disconnectFromServer (); + Q_INVOKABLE void sendCommand (const QString &command); signals: - void hostChanged(); - void portChanged(); - void connectedChanged(); - void responseReceived(const QString &response); - void errorOccurred(const QString &error); - void statusMessage(const QString &message); + void hostChanged (); + void commandPortChanged (); + void imagingPortChanged (); + void statusPortChanged (); + void connectedChanged (); + void responseReceived (const QString &response); + void errorOccurred (const QString &error); + void statusMessage (const QString &message); private slots: - void onConnected(); - void onDisconnected(); - void onReadyRead(); - void onErrorOccurred(QAbstractSocket::SocketError error); + void onConnected (); + void onDisconnected (); + void onReadyRead (); + void onErrorOccurred (QAbstractSocket::SocketError error); private: QTcpSocket m_socket; - QString m_host = QStringLiteral("127.0.0.1"); - quint16 m_port = 5000; + QString m_host = QStringLiteral ("127.0.0.1"); + quint16 m_commandPort = 9110; + quint16 m_imagingPort = 9111; + quint16 m_statusPort = 9112; }; -- cgit v1.2.3