aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--jetting-proxy/JettingProxy.cpp32
-rw-r--r--mock-jetting-controller/MockServer.cpp19
-rw-r--r--src/Xpl2Client.cpp18
-rw-r--r--src/Xpl2Client.h1
4 files changed, 29 insertions, 41 deletions
diff --git a/jetting-proxy/JettingProxy.cpp b/jetting-proxy/JettingProxy.cpp
index 30fe7df..6c70f47 100644
--- a/jetting-proxy/JettingProxy.cpp
+++ b/jetting-proxy/JettingProxy.cpp
@@ -159,8 +159,13 @@ JettingProxy::onControllerDataReady ()
if (cmd == "KA_PING")
{
- /* Reply directly — never forward keepalive to clients. */
- socket->write ("KA_PING,1\n");
+ /* Controller's reply to our keepalive ping — consume it, never
+ forward to clients. */
+ QByteArray wire;
+ if (s_wireDebug)
+ wire = " << " + trimmed;
+ qDebug ("%s RX KA_PING ← controller%s", qPrintable (logTag (*ch)),
+ wire.constData ());
continue;
}
@@ -230,14 +235,6 @@ JettingProxy::onClientDataReady ()
QByteArray line = socket->readLine ();
QByteArray trimmed = line.trimmed ();
- /* Extract command token. */
- int comma = trimmed.indexOf (',');
- QByteArray cmd = (comma >= 0) ? trimmed.left (comma) : trimmed;
-
- /* Absorb keepalive replies — never forward to controller. */
- if (cmd == "KA_PING")
- continue;
-
if (s_wireDebug)
qDebug ("%s Client → controller: %s", qPrintable (logTag (*ch)),
trimmed.constData ());
@@ -259,8 +256,17 @@ JettingProxy::onClientDataReady ()
void
JettingProxy::tick ()
{
+ /* The proxy is the interface: it originates keepalive pings to the
+ controller. Clients take no part in keepalive. */
for (auto *ch : { &m_command, &m_imaging, &m_status })
- for (auto *client : ch->clientSockets)
- if (client->state () == QAbstractSocket::ConnectedState)
- client->write ("KA_PING\n");
+ if (ch->controllerSocket
+ && ch->controllerSocket->state () == QAbstractSocket::ConnectedState)
+ {
+ ch->controllerSocket->write ("KA_PING\n");
+ QByteArray wire;
+ if (s_wireDebug)
+ wire = " >> KA_PING";
+ qDebug ("%s TX KA_PING → controller%s", qPrintable (logTag (*ch)),
+ wire.constData ());
+ }
}
diff --git a/mock-jetting-controller/MockServer.cpp b/mock-jetting-controller/MockServer.cpp
index 08eb116..ac186cd 100644
--- a/mock-jetting-controller/MockServer.cpp
+++ b/mock-jetting-controller/MockServer.cpp
@@ -121,14 +121,11 @@ MockServer::onSocketMessageReady ()
void
MockServer::tick ()
{
- /* Send KA_PING on connected sockets, retry connection on disconnected. */
+ /* Retry connection on disconnected sockets. Keepalive pings are originated
+ by the interface; the controller only replies to them. */
for (auto *port : { &m_command, &m_imaging, &m_status })
- {
- if (port->socket.state () == QAbstractSocket::ConnectedState)
- sendReply (port->socket, "KA_PING\n");
- else if (port->socket.state () == QAbstractSocket::UnconnectedState)
- port->socket.connectToHost (m_host, port->number);
- }
+ if (port->socket.state () == QAbstractSocket::UnconnectedState)
+ port->socket.connectToHost (m_host, port->number);
}
void
@@ -241,11 +238,9 @@ MockServer::sendReply (QTcpSocket &socket, const QByteArray &data)
void
MockServer::handleKaPing (Port &port, const QByteArray &params)
{
- QByteArray wire;
- if (s_wireDebug)
- wire = " << KA_PING," + params;
- qDebug ("%s RX KA_PING ACK%s", qPrintable (logTag (&port.socket)),
- wire.constData ());
+ Q_UNUSED (params);
+ /* Reply to the interface's keepalive ping. */
+ sendReply (port.socket, "KA_PING,1\n");
}
void
diff --git a/src/Xpl2Client.cpp b/src/Xpl2Client.cpp
index 2a972e0..102970e 100644
--- a/src/Xpl2Client.cpp
+++ b/src/Xpl2Client.cpp
@@ -679,9 +679,7 @@ Xpl2Client::sendCommand (QTcpSocket *socket, const QByteArray &command,
void
Xpl2Client::dispatchCommandMessage (const Xpl2Protocol::ParsedMessage &msg)
{
- if (msg.command == "KA_PING")
- handleKaPing (&m_commandSocket);
- else if (msg.command == "EV_SHUTTING_DOWN")
+ if (msg.command == "EV_SHUTTING_DOWN")
emit shuttingDown ();
else if (msg.command == "GS_JC_VERSION")
handleGsJcVersion (msg.params);
@@ -695,9 +693,7 @@ Xpl2Client::dispatchCommandMessage (const Xpl2Protocol::ParsedMessage &msg)
void
Xpl2Client::dispatchImagingMessage (const Xpl2Protocol::ParsedMessage &msg)
{
- if (msg.command == "KA_PING")
- handleKaPing (&m_imagingSocket);
- else if (msg.command == "EV_SHUTTING_DOWN")
+ if (msg.command == "EV_SHUTTING_DOWN")
emit shuttingDown ();
else if (msg.command == "n")
{
@@ -725,9 +721,7 @@ Xpl2Client::dispatchImagingMessage (const Xpl2Protocol::ParsedMessage &msg)
void
Xpl2Client::dispatchStatusMessage (const Xpl2Protocol::ParsedMessage &msg)
{
- if (msg.command == "KA_PING")
- handleKaPing (&m_statusSocket);
- else if (msg.command == "EV_SHUTTING_DOWN")
+ if (msg.command == "EV_SHUTTING_DOWN")
emit shuttingDown ();
else if (msg.command == "EV_STATUS_MSG_JC")
handleEvStatusMsgJc (msg.params);
@@ -739,12 +733,6 @@ Xpl2Client::dispatchStatusMessage (const Xpl2Protocol::ParsedMessage &msg)
}
void
-Xpl2Client::handleKaPing (QTcpSocket *socket)
-{
- sendCommand (socket, "KA_PING", { 1 });
-}
-
-void
Xpl2Client::handleGsJcVersion (const QVariantList &params)
{
if (params.size () < 4)
diff --git a/src/Xpl2Client.h b/src/Xpl2Client.h
index ef29ddb..49fbec5 100644
--- a/src/Xpl2Client.h
+++ b/src/Xpl2Client.h
@@ -306,7 +306,6 @@ private:
void dispatchCommandMessage (const Xpl2Protocol::ParsedMessage &msg);
void dispatchImagingMessage (const Xpl2Protocol::ParsedMessage &msg);
void dispatchStatusMessage (const Xpl2Protocol::ParsedMessage &msg);
- void handleKaPing (QTcpSocket *socket);
void handleGsJcVersion (const QVariantList &params);
void handleGsPhVersion (const QVariantList &params);
enum class ResponseShape