1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
|
/*
*
* Author: Andreas Steigmiller
* Copyright: 2009 Andreas Steigmiller
* Project: Konclude
*
*/
#ifndef KONCLUDE_NETWORK_HTTP_CQTHTTPTRANSACTIONMANAGER_H
#define KONCLUDE_NETWORK_HTTP_CQTHTTPTRANSACTIONMANAGER_H
// Namespace includes
#include "HttpSettings.h"
#include "CHttpTransactionManager.h"
#include "CHttpResponseExtractor.h"
#include "CHttpRequestFactory.h"
#include "CQtHttpRequest.h"
#include "CQtHttpResponse.h"
// Library includes
#include <QNetworkAccessManager>
#include <QHash>
// Other includes
#include "Network/HTTP/Events/CHttpRequstEvent.h"
#include "Network/HTTP/Events/CHttpReplyFinishedEvent.h"
#include "Network/HTTP/Events/CExtractResponseDataEvent.h"
#include "Network/HTTP/Events/CExtractResponseDataCallbackEvent.h"
#include "Network/HTTP/Events/CReleaseResponseEvent.h"
#include "Network/HTTP/Events/CAddResponseFinishedCallbackEvent.h"
#include "Network/HTTP/Events/CInstallRequestFinishedCallbackEvent.h"
#include "Concurrent/CIntervalThread.h"
// Logger includes
#include "Logger/CLogger.h"
namespace Konclude {
using namespace Concurrent;
namespace Network {
namespace HTTP {
using namespace Events;
/*!
*
* \class CQtHttpTransactionManager
* \author Andreas Steigmiller
* \version 0.1
* \brief TODO
*
*/
class CQtHttpTransactionManager : public CIntervalThread, public CHttpTransactionManager, public CHttpRequestFactory, public CHttpResponseExtractor {
Q_OBJECT
// public methods
public:
//! Constructor
CQtHttpTransactionManager(cint64 timeoutInterval = 5*60*1000);
//! Destructor
virtual ~CQtHttpTransactionManager();
virtual CHttpRequest* createRequest(const QString& url);
CHttpRequest* createRequest(const QString& url, const QByteArray& byteArray);
//virtual CHttpRequest* createFileDownloadRequest(const QString& url, QIODevice* openWriteFile);
virtual bool releaseResponse(CHttpResponse* response, bool releaseAlsoRequest = true);
virtual CHttpResponse* getResponse(CHttpRequest* request);
virtual CQtHttpResponse* getResponse(CQtHttpRequest* request);
virtual bool callbackFinished(CHttpResponse* response, CCallbackData* callback);
virtual bool callbackFinished(CQtHttpResponse* response, CCallbackData* callback);
virtual bool callbackFinishedRequest(CHttpResponse* response, CCallbackData* callbackData);
virtual QString* getExtractedText(CHttpResponse* response);
virtual bool callbackResponseData(CHttpResponse* response, QByteArray* dataArray, CCallbackData* callback);
virtual QByteArray* getResponseData(CHttpResponse* response);
virtual bool hasFinishedSucecssfully(CHttpResponse* response);
// protected slots
protected slots:
void finishedNetworkReply(QNetworkReply* reply);
virtual void threadStarted();
virtual void threadStopped();
virtual bool processCustomsEvents(QEvent::Type type, CCustomEvent *event);
virtual bool processTimer(qint64 timerID);
// protected methods
protected:
// protected variables
protected:
cint64 mTimeoutInterval;
QNetworkAccessManager* mQNAM;
QHash<QNetworkReply*,CQtHttpResponse*> mReplyResponseHash;
QSet<CQtHttpResponse*> mCriticalTimeoutSet;
QSet<CQtHttpResponse*> mNextTimeoutSet;
QSet<CQtHttpResponse*> mTimeoutSet;
const static qint64 TIMEOUTCHECKTIMER = 1;
// private methods
private:
// private variables
private:
};
}; // end namespace HTTP
}; // end namespace Network
}; // end namespace Konclude
#endif // KONCLUDE_NETWORK_HTTP_CQTHTTPTRANSACTIONMANAGER_H
|