diff options
| -rw-r--r-- | CMakeLists.txt | 1 | ||||
| -rw-r--r-- | mock-server/CMakeLists.txt | 6 | ||||
| -rw-r--r-- | mock-server/main.cpp | 64 |
3 files changed, 71 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index bcb1f62..e49cf1b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,4 +27,5 @@ add_subdirectory(src) if(PROJECT_IS_TOP_LEVEL) add_subdirectory(demo) + add_subdirectory(mock-server) endif() diff --git a/mock-server/CMakeLists.txt b/mock-server/CMakeLists.txt new file mode 100644 index 0000000..52bfabb --- /dev/null +++ b/mock-server/CMakeLists.txt @@ -0,0 +1,6 @@ +qt_add_executable(Xpl2MockServer main.cpp) + +set_target_properties(Xpl2MockServer PROPERTIES RUNTIME_OUTPUT_DIRECTORY + "${PROJECT_BINARY_DIR}/bin") + +target_link_libraries(Xpl2MockServer PRIVATE Qt6::Core Qt6::Network) diff --git a/mock-server/main.cpp b/mock-server/main.cpp new file mode 100644 index 0000000..4818d6f --- /dev/null +++ b/mock-server/main.cpp @@ -0,0 +1,64 @@ +/** + * @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); + }); + + 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; +} + +int +main (int argc, char *argv[]) +{ + QCoreApplication app (argc, argv); + + listenOn (9110, "Command", &app); + listenOn (9111, "Imaging", &app); + listenOn (9112, "Status", &app); + + return app.exec (); +} |
