diff options
| author | Thomas Vanbesien <tvanbesi@proton.me> | 2026-03-24 17:25:03 +0100 |
|---|---|---|
| committer | Thomas Vanbesien <tvanbesi@proton.me> | 2026-03-24 17:29:52 +0100 |
| commit | e9d8a8b052150f42ea00da2c07e3f78a9b7d2061 (patch) | |
| tree | 2124701ae0991ed854c1a94e58d64558b6f78b48 /jetting-proxy/JettingProxy.h | |
| parent | 8bcf948b76c9564cb38d3611228ccaf73890a548 (diff) | |
| download | QtXpl2-master.tar.gz QtXpl2-master.zip | |
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.h | 54 |
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; +}; |
