#ifndef FILETRANS_H #define FILETRANS_H #include #include #include #include #include "ClientCore.h" 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: ClientCore* cliCore_; QSharedPointer task_; }; class FileTrans : public QObject { Q_OBJECT public: FileTrans(ClientCore* clientCore); public: void SetTasks(const QVector& tasks); void RegisterFrameCall(); 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 fbtCanotSend(QSharedPointer frame); void fbtCanSend(QSharedPointer frame); void fbtTransFailed(QSharedPointer frame); private: void SendFile(const QSharedPointer& task); private: DoTransTask downTask_; QMutex lMut_; QMutex rMut_; QVector localTasks_; QVector remoteTasks_; ClientCore* clientCore_; QMutex sthMut_; QVector sendThreads_; QMap upTasks_; }; #endif