#ifndef FILETRANS_H #define FILETRANS_H #include #include #include #include #include #include "ClientCore.h" constexpr int MAX_SEND_TASK = 10; struct TransTask { bool isUpload{false}; QString localId; QString localPath; QString localUUID; QString remoteId; QString remotePath; QString remoteUUID; }; enum class TaskState { STATE_NONE = 0, STATE_RUNNING, STATE_FAILED, STATE_FINISH, }; struct DoTransTask { QFile file; quint64 totalSize{0}; quint64 tranSize{0}; quint32 permission{}; TaskState state = TaskState::STATE_NONE; TransTask task; }; class SendThread : public QThread { Q_OBJECT public: SendThread(ClientCore* clientCore); public: void run() override; void setTask(const QSharedPointer& task); private: bool isSuccess_{false}; ClientCore* cliCore_; quint32 curSendCount_{0}; QSharedPointer task_; }; class FileTrans : public QObject { Q_OBJECT public: FileTrans(ClientCore* clientCore); public: void ReqSendFile(const TransTask& task); void ReqDownFile(const TransTask& task); qint32 GetSendProgress(); qint32 GetDownProgress(); private: void fbtReqSend(QSharedPointer frame); void fbtReqDown(QSharedPointer frame); void fbtTransDone(QSharedPointer frame); void fbtCanDown(QSharedPointer frame); void fbtCanotDown(QSharedPointer frame); void fbtFileBuffer(QSharedPointer frame); void fbtFileInfo(QSharedPointer frame); void fbtCanotSend(QSharedPointer frame); void fbtCanSend(QSharedPointer frame); void fbtTransFailed(QSharedPointer frame); void fbtInterrupt(QSharedPointer frame); private: void RegisterSignal(); void SendFile(const QSharedPointer& task); private: QSharedPointer downTask_; QSharedPointer sendTask_; QMutex lMut_; QMutex rMut_; ClientCore* clientCore_; QMutex sthMut_; QMap upTasks_; }; #endif