#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; 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 fbtReqRecv(QSharedPointer frame); void fbtTransDone(QSharedPointer frame); void fbtAnsRecvSuccess(QSharedPointer frame); void fbtAnsRecvFailed(QSharedPointer frame); void fbtFileTrans(QSharedPointer frame); void fbtAnsSendFailed(QSharedPointer frame); void fbtAnsSendSuccess(QSharedPointer frame); void fbtFileTransFailed(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