aboutsummaryrefslogtreecommitdiffstats
path: root/jetting-proxy/JettingProxy.h
diff options
context:
space:
mode:
authorThomas Vanbesien <tvanbesi@proton.me>2026-03-24 17:25:03 +0100
committerThomas Vanbesien <tvanbesi@proton.me>2026-03-24 17:29:52 +0100
commite9d8a8b052150f42ea00da2c07e3f78a9b7d2061 (patch)
tree2124701ae0991ed854c1a94e58d64558b6f78b48 /jetting-proxy/JettingProxy.h
parent8bcf948b76c9564cb38d3611228ccaf73890a548 (diff)
downloadQtXpl2-master.tar.gz
QtXpl2-master.zip
Add JettingProxy relay, convert Xpl2Client to active connection modelHEADmaster
Insert a transparent TCP proxy between the controller and N clients: - JettingProxy listens on 9110-9112 (controller) and 9210-9212 (clients) - Broadcasts controller frames to all clients, forwards client→controller - Independent KA_PING handling on both sides Convert Xpl2Client from passive QTcpServer listener to active QTcpSocket outbound connections with auto-retry. New QML API: host/commandPort properties, connectToProxy()/disconnectFromProxy() replacing startListening()/stopListening().
Diffstat (limited to 'jetting-proxy/JettingProxy.h')
-rw-r--r--jetting-proxy/JettingProxy.h54
1 files changed, 54 insertions, 0 deletions
diff --git a/jetting-proxy/JettingProxy.h b/jetting-proxy/JettingProxy.h
new file mode 100644
index 0000000..ec8c26d
--- /dev/null
+++ b/jetting-proxy/JettingProxy.h
@@ -0,0 +1,54 @@
+/**
+ * @file JettingProxy.h
+ * @brief Transparent TCP relay between one controller and N clients.
+ */
+#pragma once
+
+#include <QList>
+#include <QObject>
+#include <QTcpServer>
+#include <QTcpSocket>
+#include <QTimer>
+
+class JettingProxy : public QObject
+{
+ Q_OBJECT
+
+public:
+ explicit JettingProxy (quint16 controllerPortBase, quint16 clientPortBase,
+ QObject *parent = nullptr);
+ static void enableWireDebug ();
+
+private slots:
+ void onControllerConnected ();
+ void onControllerDisconnected ();
+ void onControllerDataReady ();
+ void onClientConnected ();
+ void onClientDisconnected ();
+ void onClientDataReady ();
+ /* Send KA_PING to all connected clients on all channels. */
+ void tick ();
+
+private:
+ struct Channel
+ {
+ const char *name = nullptr;
+ QTcpServer controllerServer;
+ QTcpSocket *controllerSocket = nullptr;
+ QTcpServer clientServer;
+ QList<QTcpSocket *> clientSockets;
+ };
+
+ void setupChannel (Channel &channel, const char *name,
+ quint16 controllerPort, quint16 clientPort);
+ Channel *channelForControllerServer (QTcpServer *server);
+ Channel *channelForControllerSocket (QTcpSocket *socket);
+ Channel *channelForClientSocket (QTcpSocket *socket);
+ QString logTag (const Channel &channel) const;
+
+ Channel m_command;
+ Channel m_imaging;
+ Channel m_status;
+ QTimer m_tickTimer;
+ static bool s_wireDebug;
+};