aboutsummaryrefslogtreecommitdiffstats
path: root/src/Xpl2Client.h
diff options
context:
space:
mode:
authorThomas Vanbesien <tvanbesi@proton.me>2026-03-16 15:25:02 +0100
committerThomas Vanbesien <tvanbesi@proton.me>2026-03-16 15:25:02 +0100
commitdf2be9eb678f12b6107d582d8ebd2ca2b4b7e92b (patch)
tree71c49e292e7bd000e2363b40ac6e83cd17a31a1e /src/Xpl2Client.h
parent50034b142dc851da7118032f7218cb1d25ea98e4 (diff)
downloadQtXpl2-df2be9eb678f12b6107d582d8ebd2ca2b4b7e92b.tar.gz
QtXpl2-df2be9eb678f12b6107d582d8ebd2ca2b4b7e92b.zip
Refactor CN_ response handlers into data-driven dispatch table
Diffstat (limited to 'src/Xpl2Client.h')
-rw-r--r--src/Xpl2Client.h34
1 files changed, 23 insertions, 11 deletions
diff --git a/src/Xpl2Client.h b/src/Xpl2Client.h
index c6a7c07..c9da25d 100644
--- a/src/Xpl2Client.h
+++ b/src/Xpl2Client.h
@@ -6,10 +6,13 @@
#include "Xpl2Protocol.h"
+#include <QHash>
#include <QObject>
#include <QQmlEngine>
#include <QTcpSocket>
+#include <functional>
+
class Xpl2Client : public QObject
{
Q_OBJECT
@@ -155,17 +158,26 @@ private:
void handleKaPing (QTcpSocket &socket);
void handleGsJcVersion (const QVariantList &params);
void handleGsPhVersion (const QVariantList &params);
- void handleJcSuccessResponse (const QByteArray &command,
- const QVariantList &params);
- void handlePhSuccessResponse (const QByteArray &command,
- const QVariantList &params);
- void handleCnPhCalibrationData (const QVariantList &params);
- void handleCnPhCalibrationRawData (const QVariantList &params);
- void handleCnPhCalibratedBaseFrequency (const QVariantList &params);
- void handleCnJcStatusMessagingStart (const QVariantList &params);
- void handleCnJcStatusMessagingStop (const QVariantList &params);
- void handleCnPhStatusMessagingStart (const QVariantList &params);
- void handleCnPhStatusMessagingStop (const QVariantList &params);
+ enum class ResponseShape
+ {
+ JcSuccess,
+ PhSuccess,
+ CalData,
+ BaseFreq,
+ StatusStart
+ };
+
+ struct ResponseEntry
+ {
+ ResponseShape shape;
+ int minParams;
+ std::function<void (Xpl2Client *, const QVariantList &)> emitter;
+ };
+
+ static const QHash<QByteArray, ResponseEntry> s_responseTable;
+
+ bool dispatchResponse (const QByteArray &command, const QVariantList &params,
+ const QTcpSocket *socket);
void updateConnectedState ();
QString logTag (const QTcpSocket *socket) const;