aboutsummaryrefslogtreecommitdiffstats
path: root/mock-server
diff options
context:
space:
mode:
authorThomas Vanbesien <tvanbesi@proton.me>2026-03-11 15:25:11 +0100
committerThomas Vanbesien <tvanbesi@proton.me>2026-03-11 15:25:11 +0100
commit094b8aa2bbb8b90dff9da199873cbc6b36549eb6 (patch)
treef7dea55e25ca4f9a0461c88a9c91953bb77336fc /mock-server
parent920a1adeadef58eb04f2bf83af8fb8bc6c01a986 (diff)
downloadQtXpl2-094b8aa2bbb8b90dff9da199873cbc6b36549eb6.tar.gz
QtXpl2-094b8aa2bbb8b90dff9da199873cbc6b36549eb6.zip
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
Diffstat (limited to 'mock-server')
-rw-r--r--mock-server/CMakeLists.txt2
-rw-r--r--mock-server/EchoServer.cpp50
-rw-r--r--mock-server/EchoServer.h24
-rw-r--r--mock-server/main.cpp55
4 files changed, 80 insertions, 51 deletions
diff --git a/mock-server/CMakeLists.txt b/mock-server/CMakeLists.txt
index 52bfabb..f5d54f8 100644
--- a/mock-server/CMakeLists.txt
+++ b/mock-server/CMakeLists.txt
@@ -1,4 +1,4 @@
-qt_add_executable(Xpl2MockServer main.cpp)
+qt_add_executable(Xpl2MockServer main.cpp EchoServer.h EchoServer.cpp)
set_target_properties(Xpl2MockServer PROPERTIES RUNTIME_OUTPUT_DIRECTORY
"${PROJECT_BINARY_DIR}/bin")
diff --git a/mock-server/EchoServer.cpp b/mock-server/EchoServer.cpp
new file mode 100644
index 0000000..43fc6f9
--- /dev/null
+++ b/mock-server/EchoServer.cpp
@@ -0,0 +1,50 @@
+/**
+ * @file EchoServer.cpp
+ * @brief Simple TCP echo server for a single port.
+ */
+#include "EchoServer.h"
+
+#include <QTcpSocket>
+
+EchoServer::EchoServer (quint16 port, const char *name, QObject *parent)
+ : QTcpServer (parent), m_name (name), m_port (port)
+{
+ connect (this, &QTcpServer::newConnection, this,
+ &EchoServer::onNewConnection);
+
+ if (!listen (QHostAddress::Any, port))
+ qCritical ("Failed to listen on %s port %d: %s", m_name, m_port,
+ qPrintable (errorString ()));
+ else
+ qInfo ("Listening on %s port %d", m_name, m_port);
+}
+
+void
+EchoServer::onNewConnection ()
+{
+ while (auto *sock = nextPendingConnection ())
+ {
+ qInfo ("[%s:%d] client connected", m_name, m_port);
+ connect (sock, &QTcpSocket::readyRead, this,
+ &EchoServer::onClientReadyRead);
+ connect (sock, &QTcpSocket::disconnected, this,
+ &EchoServer::onClientDisconnected);
+ }
+}
+
+void
+EchoServer::onClientReadyRead ()
+{
+ auto *sock = qobject_cast<QTcpSocket *> (sender ());
+ QByteArray data = sock->readAll ();
+ qInfo ("[%s:%d] echo %lld bytes", m_name, m_port, data.size ());
+ sock->write (data);
+}
+
+void
+EchoServer::onClientDisconnected ()
+{
+ auto *sock = qobject_cast<QTcpSocket *> (sender ());
+ qInfo ("[%s:%d] client disconnected", m_name, m_port);
+ sock->deleteLater ();
+}
diff --git a/mock-server/EchoServer.h b/mock-server/EchoServer.h
new file mode 100644
index 0000000..2e51b1e
--- /dev/null
+++ b/mock-server/EchoServer.h
@@ -0,0 +1,24 @@
+/**
+ * @file EchoServer.h
+ * @brief Simple TCP echo server for a single port.
+ */
+#pragma once
+
+#include <QTcpServer>
+
+class EchoServer : public QTcpServer
+{
+ Q_OBJECT
+
+public:
+ EchoServer (quint16 port, const char *name, QObject *parent = nullptr);
+
+private slots:
+ void onNewConnection ();
+ void onClientReadyRead ();
+ void onClientDisconnected ();
+
+private:
+ const char *m_name;
+ quint16 m_port;
+};
diff --git a/mock-server/main.cpp b/mock-server/main.cpp
index 4818d6f..0694e4d 100644
--- a/mock-server/main.cpp
+++ b/mock-server/main.cpp
@@ -2,63 +2,18 @@
* @file main.cpp
* @brief Mock XPL2 server — echoes back on three ports.
*/
-#include <QCoreApplication>
-#include <QTcpServer>
-#include <QTcpSocket>
-
-static QTcpServer *
-listenOn (quint16 port, const char *name, QObject *parent)
-{
- auto *server = new QTcpServer (parent);
-
- QObject::connect (
- server, &QTcpServer::newConnection, server,
- [=] ()
- {
- while (auto *sock = server->nextPendingConnection ())
- {
- qInfo ("[%s:%d] client connected", name, port);
-
- QObject::connect (sock, &QTcpSocket::readyRead, sock,
- [=] ()
- {
- QByteArray data = sock->readAll ();
- qInfo ("[%s:%d] echo %lld bytes", name,
- port, data.size ());
- sock->write (data);
- });
+#include "EchoServer.h"
- QObject::connect (sock, &QTcpSocket::disconnected, sock,
- [=] ()
- {
- qInfo ("[%s:%d] client disconnected", name,
- port);
- sock->deleteLater ();
- });
- }
- });
-
- if (!server->listen (QHostAddress::Any, port))
- {
- qCritical ("Failed to listen on %s port %d: %s", name, port,
- qPrintable (server->errorString ()));
- }
- else
- {
- qInfo ("Listening on %s port %d", name, port);
- }
-
- return server;
-}
+#include <QCoreApplication>
int
main (int argc, char *argv[])
{
QCoreApplication app (argc, argv);
- listenOn (9110, "Command", &app);
- listenOn (9111, "Imaging", &app);
- listenOn (9112, "Status", &app);
+ new EchoServer (9110, "Command", &app);
+ new EchoServer (9111, "Imaging", &app);
+ new EchoServer (9112, "Status", &app);
return app.exec ();
}