aboutsummaryrefslogtreecommitdiffstats
path: root/mock-server/EchoServer.cpp
diff options
context:
space:
mode:
authorThomas Vanbesien <tvanbesi@proton.me>2026-03-13 11:58:45 +0100
committerThomas Vanbesien <tvanbesi@proton.me>2026-03-13 11:58:45 +0100
commit02fe86ab2a04a02b114d7ca8ce4374a29a1d5f45 (patch)
treeebec2643d7238d0447a236a278757c718b0ef0ac /mock-server/EchoServer.cpp
parenta2b1ccf17845e55caef7f69a5e68f49a55b6a166 (diff)
downloadQtXpl2-02fe86ab2a04a02b114d7ca8ce4374a29a1d5f45.tar.gz
QtXpl2-02fe86ab2a04a02b114d7ca8ce4374a29a1d5f45.zip
Coalesce mock server into single MockServer class
Replace three independent EchoServer instances with one MockServer that owns three QTcpServers, shares a single KA_PING timer, and uses a flat client list with localPort() for port resolution.
Diffstat (limited to 'mock-server/EchoServer.cpp')
-rw-r--r--mock-server/EchoServer.cpp97
1 files changed, 0 insertions, 97 deletions
diff --git a/mock-server/EchoServer.cpp b/mock-server/EchoServer.cpp
deleted file mode 100644
index 8d86df1..0000000
--- a/mock-server/EchoServer.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- * @file EchoServer.cpp
- * @brief Mock XPL2 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);
-
- connect (&m_pingTimer, &QTimer::timeout, this, &EchoServer::sendKaPing);
-
- 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);
- m_pingTimer.start (1000);
- }
-}
-
-void
-EchoServer::onNewConnection ()
-{
- while (auto *sock = nextPendingConnection ())
- {
- qInfo ("[%s:%d] client connected", m_name, m_port);
- m_clients.append (sock);
- connect (sock, &QTcpSocket::readyRead, this,
- &EchoServer::onClientMessageReady);
- connect (sock, &QTcpSocket::disconnected, this,
- &EchoServer::onClientDisconnected);
- }
-}
-
-void
-EchoServer::onClientMessageReady ()
-{
- auto *sock = qobject_cast<QTcpSocket *> (sender ());
- while (sock->canReadLine ())
- {
- QByteArray line = sock->readLine ();
- handleCommand (sock, line);
- }
-}
-
-void
-EchoServer::onClientDisconnected ()
-{
- auto *sock = qobject_cast<QTcpSocket *> (sender ());
- qInfo ("[%s:%d] client disconnected", m_name, m_port);
- m_clients.removeOne (sock);
- sock->deleteLater ();
-}
-
-void
-EchoServer::sendKaPing ()
-{
- for (auto *client : m_clients)
- {
- if (client->state () == QAbstractSocket::ConnectedState)
- client->write ("KA_PING\n");
- }
-}
-
-void
-EchoServer::handleCommand (QTcpSocket *client, const QByteArray &line)
-{
- QByteArray trimmed = line.trimmed ();
- if (trimmed.isEmpty ())
- return;
-
- /* Split on first comma to get command token. */
- int comma = trimmed.indexOf (',');
- QByteArray cmd = (comma >= 0) ? trimmed.left (comma) : trimmed;
-
- if (cmd == "KA_PING")
- {
- qDebug ("[%s:%d] KA_PING ACK received", m_name, m_port);
- return;
- }
-
- if (cmd == "GS_JC_VERSION")
- {
- qInfo ("[%s:%d] -> GS_JC_VERSION reply", m_name, m_port);
- client->write ("GS_JC_VERSION,1,\"1.05\",\"2.00\",15\n");
- return;
- }
-
- qWarning ("[%s:%d] Unknown command: %s", m_name, m_port,
- trimmed.constData ());
-}