/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright (C) 2017-2018 Simon Stürz . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef SNAPDCONNECTION_H #define SNAPDCONNECTION_H #include #include #include #include "snapdreply.h" class SnapdConnection : public QLocalSocket { Q_OBJECT public: explicit SnapdConnection(QObject *parent = nullptr); ~SnapdConnection(); SnapdReply *get(const QString &path, QObject *parent); SnapdReply *post(const QString &path, const QByteArray &payload, QObject *parent); SnapdReply *put(const QString &path, const QByteArray &payload, QObject *parent); bool isConnected() const; private: bool m_chuncked = false; QByteArray m_header; QByteArray m_payload; bool m_connected = false; bool m_debug = false; SnapdReply *m_currentReply = nullptr; QQueue m_replyQueue; void setConnected(const bool &connected); // Helper methods QByteArray createRequestHeader(const QString &method, const QString &path, const QByteArray &payload = QByteArray()); QByteArray getChunckedPayload(const QByteArray &payload); void processData(); void sendNextRequest(); signals: void connectedChanged(const bool &connected); private slots: void onConnected(); void onDisconnected(); void onError(const QLocalSocket::LocalSocketError &socketError); void onStateChanged(const QLocalSocket::LocalSocketState &state); void onReadyRead(); }; #endif // SNAPDCONNECTION_H