/** * @file JettingProxy.h * @brief Transparent TCP relay between one controller and N clients. */ #pragma once #include #include #include #include #include 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 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; };