diff options
| -rw-r--r-- | jetting-proxy/JettingProxy.cpp | 32 | ||||
| -rw-r--r-- | mock-jetting-controller/MockServer.cpp | 19 | ||||
| -rw-r--r-- | src/Xpl2Client.cpp | 18 | ||||
| -rw-r--r-- | src/Xpl2Client.h | 1 |
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 ¶ms) { - 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 ¶ms) { 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 ¶ms); void handleGsPhVersion (const QVariantList ¶ms); enum class ResponseShape |
