/* */ #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 RequestGroupMan; class DefaultBtMessageDispatcher : public BtMessageDispatcher { private: cuid_t cuid_; std::deque > messageQueue_; std::deque requestSlots_; SharedHandle downloadContext_; SharedHandle peerStorage_; SharedHandle pieceStorage_; BtMessageFactory* messageFactory_; SharedHandle peer_; RequestGroupMan* requestGroupMan_; time_t requestTimeout_; 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(BtMessageFactory* factory); void setRequestGroupMan(RequestGroupMan* rgman); void setCuid(cuid_t cuid) { cuid_ = cuid; } void setRequestTimeout(time_t requestTimeout) { requestTimeout_ = requestTimeout; } }; typedef SharedHandle DefaultBtMessageDispatcherHandle; } // namespace aria2 #endif // D_DEFAULT_BT_MESSAGE_DISPATCHER_H