2017-11-22 19:22:53 +08:00
|
|
|
|
#ifndef QQTWEBWORKCLIENT_H
|
|
|
|
|
#define QQTWEBWORKCLIENT_H
|
|
|
|
|
|
|
|
|
|
#include <QNetworkAccessManager>
|
|
|
|
|
#include <QNetworkReply>
|
|
|
|
|
//import this struct will not build fail
|
|
|
|
|
#include <QNetworkProxy>
|
|
|
|
|
#include <QSslError>
|
|
|
|
|
#include <qqt-qt.h>
|
|
|
|
|
#include <qqt-local.h>
|
|
|
|
|
#include <qqtcore.h>
|
2017-11-23 12:33:32 +08:00
|
|
|
|
#include <QUuid>
|
2017-11-22 19:22:53 +08:00
|
|
|
|
|
|
|
|
|
class QQTSHARED_EXPORT QQtWebAccessSession : public QObject
|
|
|
|
|
{
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
public:
|
2017-11-23 12:33:32 +08:00
|
|
|
|
explicit QQtWebAccessSession ( QObject* parent = 0 ) :
|
|
|
|
|
QObject ( parent ) {
|
|
|
|
|
m_pTimer = new QTimer ( this );
|
|
|
|
|
m_pTimer->setSingleShot ( true );
|
|
|
|
|
m_pTimer->setInterval ( 10000 );
|
|
|
|
|
}
|
2017-11-22 19:22:53 +08:00
|
|
|
|
virtual ~QQtWebAccessSession() {}
|
|
|
|
|
|
2017-11-23 12:33:32 +08:00
|
|
|
|
void setTimeOut ( int timeout ) {
|
|
|
|
|
m_pTimer->setInterval ( timeout );
|
|
|
|
|
}
|
|
|
|
|
QTimer* getTimer() {
|
|
|
|
|
return m_pTimer;
|
|
|
|
|
}
|
|
|
|
|
QNetworkReply* getWebAccessReply() {
|
|
|
|
|
return m_pNetworkReply;
|
|
|
|
|
}
|
|
|
|
|
void setWebAccessReply ( QNetworkReply* reply ) {
|
|
|
|
|
m_pNetworkReply = reply;
|
|
|
|
|
}
|
|
|
|
|
QString getWebAccessUrl() {
|
|
|
|
|
return m_strUrl;
|
|
|
|
|
}
|
|
|
|
|
void setWebAccessUrl ( QString strUrl ) {
|
|
|
|
|
m_strUrl = strUrl;
|
|
|
|
|
}
|
|
|
|
|
QString getWebAccessSessionName() {
|
|
|
|
|
return m_strSessionName;
|
|
|
|
|
}
|
|
|
|
|
void setWebAccessSessionName ( QString strSessionName ) {
|
|
|
|
|
m_strSessionName = strSessionName;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
//call back
|
|
|
|
|
QNetworkReply* m_pNetworkReply;
|
|
|
|
|
//call time out
|
|
|
|
|
QTimer* m_pTimer;
|
|
|
|
|
//calling url [user set]
|
|
|
|
|
QString m_strUrl;
|
2017-11-22 19:22:53 +08:00
|
|
|
|
/**
|
2017-11-23 12:33:32 +08:00
|
|
|
|
* @brief m_sessionName be a uuid [user set or auto]
|
2017-11-22 19:22:53 +08:00
|
|
|
|
* talk with whom, which protocol, req content, all represented by this name;
|
|
|
|
|
*/
|
2017-11-23 12:33:32 +08:00
|
|
|
|
QString m_strSessionName;
|
2017-11-22 19:22:53 +08:00
|
|
|
|
} ;
|
2017-11-23 12:33:32 +08:00
|
|
|
|
|
|
|
|
|
class QQTSHARED_EXPORT QQtWebAccessSessionManager : public QObject
|
|
|
|
|
{
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
public:
|
|
|
|
|
explicit QQtWebAccessSessionManager ( QObject* parent = 0 ) :
|
|
|
|
|
QObject ( parent ) {}
|
|
|
|
|
virtual ~QQtWebAccessSessionManager() {}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief addWebAccessSession user new custom session and
|
|
|
|
|
* please set session name different.
|
|
|
|
|
* @return session name
|
|
|
|
|
*/
|
|
|
|
|
QString addWebAccessSession ( QQtWebAccessSession* session ) {
|
|
|
|
|
if ( !session )
|
|
|
|
|
return QString();
|
|
|
|
|
|
|
|
|
|
m_listWebAccessSession.push_back ( session );
|
|
|
|
|
return session->getWebAccessSessionName();
|
|
|
|
|
}
|
|
|
|
|
void removeWebAccessSession ( QQtWebAccessSession* session ) {
|
|
|
|
|
if ( !session )
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
m_listWebAccessSession.removeOne ( session );
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* @brief newWebAccessSession
|
|
|
|
|
* QQtWebAccessSessionManager create this session and
|
|
|
|
|
* user set
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
QQtWebAccessSession* newWebAccessSession();
|
|
|
|
|
|
|
|
|
|
QNetworkReply* getReplyHandlerByUrl ( QString& strUrl );
|
|
|
|
|
QString getSessionNameByUrl ( QString& strUrl );
|
|
|
|
|
QQtWebAccessSession* getSessionByUrl ( QString& strUrl );
|
|
|
|
|
|
|
|
|
|
QString getRequestUrlByReply ( QNetworkReply* reply );
|
|
|
|
|
QString getSessionNameByReply ( QNetworkReply* reply );
|
|
|
|
|
QQtWebAccessSession* getSessionByReply ( QNetworkReply* reply );
|
|
|
|
|
|
|
|
|
|
QNetworkReply* getReplyHandlerBySessionName ( QString& strSessionName );
|
|
|
|
|
QString getRequestUrlBySessionName ( QString& strSessionName );
|
|
|
|
|
QQtWebAccessSession* getSessionBySessionName ( QString& strSessionName );
|
|
|
|
|
|
|
|
|
|
QNetworkReply* getReplyHandlerByTimer ( QTimer* timer );
|
|
|
|
|
QString getRequestUrlByTimer ( QTimer* timer );
|
|
|
|
|
QQtWebAccessSession* getSessionByTimer ( QTimer* timer );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
QNetworkReply* getReplyHandler ( QQtWebAccessSession* session );
|
|
|
|
|
QString getRequestUrl ( QQtWebAccessSession* session );
|
|
|
|
|
QString getSessionName ( QQtWebAccessSession* session );
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
QList<QQtWebAccessSession*> m_listWebAccessSession;
|
|
|
|
|
friend class QQtWebAccessManager;
|
|
|
|
|
} ;
|
|
|
|
|
|
|
|
|
|
|
2017-11-22 19:22:53 +08:00
|
|
|
|
/**
|
2017-11-23 12:33:32 +08:00
|
|
|
|
* @brief The QQtWebAccessManager class
|
|
|
|
|
* XXProtocol One Ftp Http QWebSocket(Custom Web Protocol) 单工...(全双工通信)
|
2017-11-22 19:22:53 +08:00
|
|
|
|
* Multi 半双工(客户端并发,服务器序列) QNetworkAccessManager
|
2017-11-23 12:33:32 +08:00
|
|
|
|
* Multi 全双工 QNetworkAccessManager
|
2017-11-22 19:22:53 +08:00
|
|
|
|
* need ssl
|
|
|
|
|
* Qt team 实现了几种协议的管理,就能进行几种协议的通讯。supportedSchemes
|
2017-11-23 12:33:32 +08:00
|
|
|
|
* 用户输入的session,还可以被完整返回来,所以不必自己再实现一个链表进行管理,在session当中完整的保存就好了。
|
2017-11-22 19:22:53 +08:00
|
|
|
|
*/
|
|
|
|
|
class QQTSHARED_EXPORT QQtWebAccessManager : public QNetworkAccessManager
|
|
|
|
|
{
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
public:
|
2017-11-23 12:33:32 +08:00
|
|
|
|
explicit QQtWebAccessManager ( QObject* parent = 0 );
|
2017-11-23 19:12:48 +08:00
|
|
|
|
|
|
|
|
|
QQtWebAccessSessionManager* getWebAccessSessionManager() {
|
|
|
|
|
return manager;
|
|
|
|
|
}
|
2017-11-23 12:33:32 +08:00
|
|
|
|
/**
|
|
|
|
|
* @brief sendGetRequest
|
|
|
|
|
* use for custom session;
|
|
|
|
|
* @param session
|
|
|
|
|
*/
|
|
|
|
|
void sendGetRequest ( QQtWebAccessSession* session );
|
2017-11-22 19:22:53 +08:00
|
|
|
|
|
2017-11-23 19:12:48 +08:00
|
|
|
|
QQtWebAccessSession* sendGetRequest ( QString strUrl );
|
2017-11-23 12:33:32 +08:00
|
|
|
|
QQtWebAccessSession* sendGetRequests ( QStringList& strUrls );
|
|
|
|
|
QQtWebAccessSession* sendGetRequest ( QNetworkRequest& netRequest );
|
|
|
|
|
QQtWebAccessSession* sendGetRequests ( QList<QNetworkRequest*>& netRequests );
|
2017-11-22 19:22:53 +08:00
|
|
|
|
|
2017-11-23 19:12:48 +08:00
|
|
|
|
QQtWebAccessSession* sendPostRequest ( QString strUrl );
|
2017-11-22 19:22:53 +08:00
|
|
|
|
|
|
|
|
|
signals:
|
2017-11-23 12:33:32 +08:00
|
|
|
|
void updateUploadProgress ( QQtWebAccessSession* session, qint64 bytesSent, qint64 bytesTotal );
|
|
|
|
|
void updateDownloadProgress ( QQtWebAccessSession* session, qint64 bytesReceived, qint64 bytesTotal );
|
2017-11-22 19:22:53 +08:00
|
|
|
|
//reply->readAll but maybe not all data once
|
2017-11-23 12:33:32 +08:00
|
|
|
|
void readyRead ( QQtWebAccessSession* session );
|
2017-11-22 19:22:53 +08:00
|
|
|
|
//reply->readAll all data once in theory
|
2017-11-23 12:33:32 +08:00
|
|
|
|
void replyFinished ( QQtWebAccessSession* session );
|
|
|
|
|
void replyTimeOut ( QQtWebAccessSession* session );
|
2017-11-22 19:22:53 +08:00
|
|
|
|
|
|
|
|
|
public slots:
|
|
|
|
|
|
|
|
|
|
private slots:
|
2017-11-23 12:33:32 +08:00
|
|
|
|
void finished ( QNetworkReply* reply );
|
|
|
|
|
void authenticationRequired ( QNetworkReply*, QAuthenticator* );
|
|
|
|
|
void proxyAuthenticationRequired ( QNetworkProxy, QAuthenticator* );
|
|
|
|
|
void sslErrors ( QNetworkReply*, QList<QSslError> );
|
|
|
|
|
void networkAccessibleChanged ( QNetworkAccessManager::NetworkAccessibility );
|
2017-11-22 19:22:53 +08:00
|
|
|
|
void networkSessionConnected();
|
|
|
|
|
|
|
|
|
|
void localReplyTimeOut();
|
|
|
|
|
void localReadyRead();
|
2017-11-23 12:33:32 +08:00
|
|
|
|
void localUpdateUploadProgress ( qint64 bytesSent, qint64 bytesTotal );
|
|
|
|
|
void localUpdateDownloadProgress ( qint64 bytesReceived, qint64 bytesTotal );
|
2017-11-22 19:22:53 +08:00
|
|
|
|
|
|
|
|
|
private:
|
2017-11-23 12:33:32 +08:00
|
|
|
|
QQtWebAccessSessionManager* manager;
|
2017-11-22 19:22:53 +08:00
|
|
|
|
|
2017-11-23 12:33:32 +08:00
|
|
|
|
friend class QQtWebAccessSessionManager;
|
2017-11-22 19:22:53 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif // QQTWEBWORKCLIENT_H
|