diff options
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; +}; |
