/* */ #ifndef D_ABSTRACT_BT_MESSAGE_H #define D_ABSTRACT_BT_MESSAGE_H #include "BtMessage.h" #include "Command.h" namespace aria2 { class PieceStorage; class Peer; class BtMessageDispatcher; class BtMessageFactory; class BtRequestFactory; class PeerConnection; class BtMessageValidator; class AbstractBtMessage : public BtMessage { private: bool invalidate_; bool uploading_; cuid_t cuid_; const char* name_; PieceStorage* pieceStorage_; std::shared_ptr peer_; BtMessageDispatcher* dispatcher_; BtMessageFactory* messageFactory_; BtRequestFactory* requestFactory_; PeerConnection* peerConnection_; std::unique_ptr validator_; bool metadataGetMode_; protected: PieceStorage* getPieceStorage() const { return pieceStorage_; } PeerConnection* getPeerConnection() const { return peerConnection_; } BtMessageDispatcher* getBtMessageDispatcher() const { return dispatcher_; } BtRequestFactory* getBtRequestFactory() const { return requestFactory_; } BtMessageFactory* getBtMessageFactory() const { return messageFactory_; } bool isMetadataGetMode() const { return metadataGetMode_; } public: AbstractBtMessage(uint8_t id, const char* name); virtual ~AbstractBtMessage(); virtual bool isInvalidate() CXX11_OVERRIDE { return invalidate_; } void setInvalidate(bool invalidate) { invalidate_ = invalidate; } virtual bool isUploading() CXX11_OVERRIDE { return uploading_; } void setUploading(bool uploading) { uploading_ = uploading; } cuid_t getCuid() const { return cuid_; } void setCuid(cuid_t cuid) { cuid_ = cuid; } const std::shared_ptr& getPeer() const { return peer_; } void setPeer(const std::shared_ptr& peer); virtual void doReceivedAction() CXX11_OVERRIDE {} virtual void validate() CXX11_OVERRIDE; virtual void onQueued() CXX11_OVERRIDE {} virtual void onAbortOutstandingRequestEvent( const BtAbortOutstandingRequestEvent& event) CXX11_OVERRIDE { } virtual void onCancelSendingPieceEvent(const BtCancelSendingPieceEvent& event) CXX11_OVERRIDE { } virtual void onChokingEvent(const BtChokingEvent& event) CXX11_OVERRIDE {} void setBtMessageValidator(std::unique_ptr validator); void setPieceStorage(PieceStorage* pieceStorage); void setBtMessageDispatcher(BtMessageDispatcher* dispatcher); void setPeerConnection(PeerConnection* peerConnection); void setBtMessageFactory(BtMessageFactory* factory); void setBtRequestFactory(BtRequestFactory* factory); const char* getName() const { return name_; } void enableMetadataGetMode() { metadataGetMode_ = true; } }; } // namespace aria2 #endif // D_ABSTRACT_BT_MESSAGE_H