Mercurial > hg > orthanc-transfers
diff Framework/HttpQueries/HttpQueriesQueue.h @ 0:95226b754d9e
initial release
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 17 Sep 2018 11:34:55 +0200 |
parents | |
children | 9bcd6eadcff5 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Framework/HttpQueries/HttpQueriesQueue.h Mon Sep 17 11:34:55 2018 +0200 @@ -0,0 +1,90 @@ +/** + * Transfers accelerator plugin for Orthanc + * Copyright (C) 2018 Osimis, Belgium + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + **/ + + +#pragma once + +#include "IHttpQuery.h" + +#include <Plugins/Samples/Common/OrthancPluginCppWrapper.h> + +#include <boost/thread/mutex.hpp> +#include <boost/thread/condition_variable.hpp> + + +namespace OrthancPlugins +{ + class HttpQueriesQueue : public boost::noncopyable + { + public: + enum Status + { + Status_Running, + Status_Success, + Status_Failure + }; + + private: + OrthancPluginContext *context_; + OrthancPeers peers_; + boost::mutex mutex_; + boost::condition_variable completed_; + std::vector<IHttpQuery*> queries_; + unsigned int maxRetries_; + + size_t position_; + uint64_t downloadedSize_; // GET answers + POST answers + uint64_t uploadedSize_; // PUT body + POST body + size_t successQueries_; + bool isFailure_; + + + Status GetStatusInternal() const; + + public: + HttpQueriesQueue(OrthancPluginContext* context); + + ~HttpQueriesQueue(); + + OrthancPeers& GetOrthancPeers() + { + return peers_; + } + + unsigned int GetMaxRetries(); + + void SetMaxRetries(unsigned int maxRetries); + + void Reserve(size_t size); + + void Reset(); + + void Enqueue(IHttpQuery* query); // Takes ownership + + bool ExecuteOneQuery(uint64_t& networkTraffic); + + Status WaitComplete(unsigned int timeoutMS); + + void WaitComplete(); + + void GetStatistics(size_t& scheduledQueriesCount, + size_t& successQueriesCount, + uint64_t& downloadedSize, + uint64_t& uploadedSize); + }; +}