/* */ #ifndef _D_DEFAULT_BT_MESSAGE_DISPATCHER_H_ #define _D_DEFAULT_BT_MESSAGE_DISPATCHER_H_ #include "BtMessageDispatcher.h" #include #include "a2time.h" #include "Command.h" namespace aria2 { class DownloadContext; class PeerStorage; class PieceStorage; class BtMessage; class BtMessageFactory; class Peer; class Piece; class Logger; class RequestGroupMan; class DefaultBtMessageDispatcher : public BtMessageDispatcher { private: cuid_t cuid; std::deque > messageQueue_; std::deque requestSlots_; SharedHandle downloadContext_; SharedHandle peerStorage_; SharedHandle pieceStorage_; WeakHandle messageFactory_; SharedHandle peer_; WeakHandle requestGroupMan_; time_t requestTimeout_; Logger* logger_; public: DefaultBtMessageDispatcher(); virtual ~DefaultBtMessageDispatcher(); virtual void addMessageToQueue(const SharedHandle& btMessage); virtual void addMessageToQueue (const std::vector >& btMessages); virtual void sendMessages(); virtual void doCancelSendingPieceAction(size_t index, uint32_t begin, size_t length); virtual void doCancelSendingPieceAction(const SharedHandle& piece); virtual void doAbortOutstandingRequestAction(const SharedHandle& piece); virtual void doChokedAction(); virtual void doChokingAction(); virtual void checkRequestSlotAndDoNecessaryThing(); virtual bool isSendingInProgress(); virtual size_t countMessageInQueue() { return messageQueue_.size(); } virtual size_t countOutstandingRequest() { return requestSlots_.size(); } virtual bool isOutstandingRequest(size_t index, size_t blockIndex); virtual RequestSlot getOutstandingRequest(size_t index, uint32_t begin, size_t length); virtual void removeOutstandingRequest(const RequestSlot& slot); virtual void addOutstandingRequest(const RequestSlot& requestSlot); virtual size_t countOutstandingUpload(); const std::deque >& getMessageQueue() const { return messageQueue_; } const std::deque& getRequestSlots() const { return requestSlots_; } void setPeer(const SharedHandle& peer); void setDownloadContext(const SharedHandle& downloadContext); void setPieceStorage(const SharedHandle& pieceStorage); void setPeerStorage(const SharedHandle& peerStorage); void setBtMessageFactory(const WeakHandle& factory); void setRequestGroupMan(const WeakHandle& rgman); void setCuid(cuid_t cuid) { this->cuid = cuid; } void setRequestTimeout(time_t requestTimeout) { requestTimeout_ = requestTimeout; } }; typedef SharedHandle DefaultBtMessageDispatcherHandle; } // namespace aria2 #endif // _D_DEFAULT_BT_MESSAGE_DISPATCHER_H_