19class QI_QMP_QMPI_EXPORT
Qmpi :
public QObject
39 std::variant<QHostAddress, QString> mHostId;
static_assert(std::variant_size_v<
decltype(mHostId)> == 2);
45 std::queue<ExecutionTask> mExecutionQueue;
48 QTimer mTransactionTimer;
52 explicit Qmpi(QObject* parent =
nullptr);
53 explicit Qmpi(
const QHostAddress& address, quint16 port, QObject* parent =
nullptr);
54 explicit Qmpi(
const QString& hostname, quint16 port, QObject* parent =
nullptr);
63 void changeState(State newState);
64 bool startTransactionTimer();
65 bool stopTransactionTimer();
67 void raiseCommunicationError(CommunicationError error);
71 void negotiateCapabilities();
74 bool sendCommand(QString command, QJsonObject args = QJsonObject());
78 void processServerMessage(
const QJsonObject& jMsg);
79 bool processGreetingMessage(
const QJsonObject& jGreeting);
80 bool processSuccessMessage(
const QJsonObject& jSuccess);
81 bool processErrorMessage(
const QJsonObject& jError);
82 bool processEventMessage(
const QJsonObject& jEvent);
89 QHostAddress address()
const;
90 QString hostname()
const;
92 int transactionTimeout()
const;
94 void setAddress(
const QHostAddress address);
95 void setHostname(
const QString hostname);
96 void setPort(quint16 port);
97 void setTransactionTimeout(
int timeout = 30000);
100 void connectToHost();
101 void disconnectFromHost();
103 bool isConnectionActive()
const;
104 bool isConnected()
const;
107 void execute(QString command, QJsonObject args = QJsonObject(), std::any context = std::any());
111 void handleSocketStateChange(QAbstractSocket::SocketState socketState);
112 void handleReceivedData();
113 void handleTransactionTimeout();
116 void connected(QJsonObject version, QJsonArray capabilities);