/* */ #ifndef _D_DEFAULT_BT_MESSAGE_DISPATCHER_H_ #define _D_DEFAULT_BT_MESSAGE_DISPATCHER_H_ #include "BtMessageDispatcher.h" #include #include "a2time.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: int32_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(int32_t cuid) { this->cuid = cuid; } void setRequestTimeout(time_t requestTimeout) { this->requestTimeout = requestTimeout; } }; typedef SharedHandle DefaultBtMessageDispatcherHandle; } // namespace aria2 #endif // _D_DEFAULT_BT_MESSAGE_DISPATCHER_H_