4
1
mirror of https://github.com/QuasarApp/qTbot.git synced 2025-05-09 03:39:35 +00:00

added priority sustem

This commit is contained in:
Andrei Yankovich 2024-12-15 11:15:15 +01:00
parent f8c04492fa
commit bb22a69921
2 changed files with 48 additions and 4 deletions
src/qTbot/src/public/qTbot

@ -37,6 +37,8 @@ const QByteArray &IBot::token() const {
void IBot::setToken(const QByteArray &newToken) {
_token = newToken;
_startTime = QDateTime::currentDateTime();
}
void IBot::incomeNewUpdate(const QSharedPointer<iUpdate> &message) {
@ -96,6 +98,14 @@ QNetworkReply* IBot::sendRquestImpl(const QSharedPointer<iRequest> &rquest) {
return networkReplay;
}
QDateTime IBot::startTime() const {
return _startTime;
}
unsigned long long IBot::totalSentRequests() const {
return _totalRequest;
}
int IBot::parallelActiveNetworkThreads() const {
return _parallelActiveNetworkThreads;
}
@ -121,7 +131,9 @@ QFuture<QByteArray>
IBot::sendRequest(const QSharedPointer<iRequest> &rquest) {
auto&& responce = QSharedPointer<QPromise<QByteArray>>::create();
responce->start();
_requestQueue.insert(rquest->priority(),
_requestQueue.insert(makeKey(rquest->priority()),
RequestData{rquest, "", responce});
_requestExecutor->start();
@ -134,7 +146,7 @@ IBot::sendRequest(const QSharedPointer<iRequest> &rquest,
const QString &pathToResult) {
auto&& responce = QSharedPointer<QPromise<QByteArray>>::create();
responce->start();
_requestQueue.insert(rquest->priority(),
_requestQueue.insert(makeKey(rquest->priority()),
RequestData{rquest, pathToResult, responce});
_requestExecutor->start();
@ -173,7 +185,7 @@ void IBot::handleEcxecuteRequest() {
return;
}
auto&& requestData = _requestQueue.take(_requestQueue.lastKey());
auto&& requestData = _requestQueue.take(_requestQueue.firstKey());
if (requestData.responceFilePath.size()) {
sendRequestPrivate(requestData.request, requestData.responceFilePath, requestData.responce);
@ -183,6 +195,13 @@ void IBot::handleEcxecuteRequest() {
sendRequestPrivate(requestData.request, requestData.responce);
}
unsigned long long IBot::makeKey(iRequest::RequestPriority priority) {
unsigned long long key = _totalRequest;
_totalRequest++;
key = key | (static_cast<unsigned long long>(iRequest::RequestPriority::MaxPriorityValue - priority) << 56);
return key;
}
void IBot::sendRequestPrivate(const QSharedPointer<iRequest> &rquest,
const QSharedPointer<QPromise<QByteArray> > &promise) {

@ -179,9 +179,31 @@ public:
*/
void setReqestLimitPerSecond(int newReqestLimitPerSecond);
/**
* @brief parallelActiveNetworkThreads
* @return
*/
int parallelActiveNetworkThreads() const;
/**
* @brief setParallelActiveNetworkThreads
* @param newParallelActiveNetworkThreads
*/
void setParallelActiveNetworkThreads(int newParallelActiveNetworkThreads);
/**
* @brief totalSentRequests This is total prepared requests count of bot from the start.
* @see startTime method to get start date time.
* @return requests count.
*/
unsigned long long totalSentRequests() const;
/**
* @brief startTime this is time when bol wil started.
* @return
*/
QDateTime startTime() const;
protected:
/**
@ -293,6 +315,7 @@ signals:
private slots:
void handleEcxecuteRequest();
private:
unsigned long long makeKey(iRequest::RequestPriority priority);
void setCurrentParallelActiveNetworkThreads(int newParallelActiveNetworkThreads);
void sendRequestPrivate(const QSharedPointer<iRequest>& rquest,
@ -310,7 +333,9 @@ private:
QSet<unsigned long long> _processed;
QNetworkAccessManager *_manager = nullptr;
QTimer* _requestExecutor = nullptr;
QMultiMap<int, RequestData> _requestQueue;
unsigned long long _totalRequest = 0;
QDateTime _startTime;
QMap<unsigned long long, RequestData> _requestQueue;
int _currentParallelActiveNetworkThreads = 0;
int _parallelActiveNetworkThreads = 5;