RemoteSubscriber.h 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. //
  2. // Created by Tobias Hieta on 31/03/15.
  3. //
  4. #ifndef KONVERGO_REMOTESUBSCRIBER_H
  5. #define KONVERGO_REMOTESUBSCRIBER_H
  6. #include <QObject>
  7. #include <QUrl>
  8. #include <QDateTime>
  9. #include <QDomDocument>
  10. #include <QNetworkReply>
  11. #include <QQueue>
  12. #include "qhttpresponse.h"
  13. /////////////////////////////////////////////////////////////////////////////////////////
  14. class RemoteSubscriber : public QObject
  15. {
  16. public:
  17. RemoteSubscriber(const QString& clientIdentifier, const QString& deviceName, const QUrl& address, QObject* parent = 0);
  18. void reSubscribe();
  19. int lastSubscribe() const { return m_subscribeTime.elapsed(); }
  20. QString deviceName();
  21. QString clientIdentifier();
  22. virtual void sendUpdate();
  23. void timelineFinished(QNetworkReply* reply);
  24. void queueTimeline(quint64 playerCommandID, const QByteArray& timelineData);
  25. QByteArray getTimeline();
  26. void setCommandId(quint64 playerCommandId, quint64 controllerCommandId);
  27. quint64 mostRecentCommandId()
  28. {
  29. QMutexLocker lk(&m_commandIdMapLock);
  30. if (!m_commandIdQueue.isEmpty() && !m_commandIdMap.isEmpty())
  31. return m_commandIdMap[m_commandIdQueue.last()];
  32. else
  33. return 0;
  34. }
  35. quint64 commandId(quint64 playerCommandId)
  36. {
  37. QMutexLocker lk(&m_commandIdMapLock);
  38. if (m_commandIdMap.contains(playerCommandId))
  39. return m_commandIdMap[playerCommandId];
  40. lk.unlock();
  41. return mostRecentCommandId();
  42. }
  43. private:
  44. QMutex m_commandIdMapLock;
  45. QHash<quint64, quint64> m_commandIdMap;
  46. QQueue<quint64> m_commandIdQueue;
  47. QNetworkAccessManager* m_netAccess;
  48. QUrl m_address;
  49. QTime m_subscribeTime;
  50. QMutex m_timelineLock;
  51. QDomDocument m_timeline;
  52. protected:
  53. QString m_clientIdentifier;
  54. QString m_deviceName;
  55. #if 0
  56. quint16 m_errors;
  57. #endif
  58. };
  59. /////////////////////////////////////////////////////////////////////////////////////////
  60. class RemotePollSubscriber : public RemoteSubscriber
  61. {
  62. public:
  63. RemotePollSubscriber(const QString& clientIdentifier, const QString& deviceName, QHttpResponse *response, QObject* parent = 0);
  64. void setHTTPResponse(QHttpResponse *response);
  65. virtual void sendUpdate();
  66. private :
  67. QHttpResponse* m_response;
  68. public Q_SLOTS:
  69. void responseDone();
  70. };
  71. #endif //KONVERGO_REMOTESUBSCRIBER_H