2025-06-16 23:41:35 +08:00
|
|
|
#ifndef FILETRANS_H
|
|
|
|
|
#define FILETRANS_H
|
|
|
|
|
|
|
|
|
|
#include <QFile>
|
|
|
|
|
#include <QMap>
|
2025-06-17 11:48:13 +08:00
|
|
|
#include <QMutex>
|
2025-06-16 23:41:35 +08:00
|
|
|
#include <QVector>
|
|
|
|
|
|
|
|
|
|
#include "ClientCore.h"
|
|
|
|
|
|
|
|
|
|
struct TransTask {
|
|
|
|
|
bool isUpload{false};
|
|
|
|
|
QString localId;
|
|
|
|
|
QString localPath;
|
|
|
|
|
QString localUUID;
|
|
|
|
|
QString remoteId;
|
|
|
|
|
QString remotePath;
|
|
|
|
|
QString remoteUUID;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
enum class TaskState {
|
2025-06-17 11:48:13 +08:00
|
|
|
STATE_NONE = 0,
|
2025-06-16 23:41:35 +08:00
|
|
|
STATE_RUNNING,
|
|
|
|
|
STATE_FAILED,
|
|
|
|
|
STATE_FINISH,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct DoTransTask {
|
|
|
|
|
QFile file;
|
2025-06-17 16:42:39 +08:00
|
|
|
quint64 totalSize{0};
|
|
|
|
|
quint64 tranSize{0};
|
|
|
|
|
quint32 permission{};
|
2025-06-17 11:48:13 +08:00
|
|
|
TaskState state = TaskState::STATE_NONE;
|
2025-06-16 23:41:35 +08:00
|
|
|
TransTask task;
|
|
|
|
|
};
|
|
|
|
|
|
2025-06-17 11:48:13 +08:00
|
|
|
class SendThread : public QThread
|
|
|
|
|
{
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
public:
|
|
|
|
|
SendThread(ClientCore* clientCore);
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
void run() override;
|
|
|
|
|
void setTask(const QSharedPointer<DoTransTask>& task);
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
ClientCore* cliCore_;
|
|
|
|
|
QSharedPointer<DoTransTask> task_;
|
|
|
|
|
};
|
|
|
|
|
|
2025-06-16 23:41:35 +08:00
|
|
|
class FileTrans : public QObject
|
|
|
|
|
{
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
public:
|
|
|
|
|
FileTrans(ClientCore* clientCore);
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
void SetTasks(const QVector<TransTask>& tasks);
|
|
|
|
|
void RegisterFrameCall();
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
void fbtReqSend(QSharedPointer<FrameBuffer> frame);
|
2025-06-17 16:42:39 +08:00
|
|
|
void fbtReqDown(QSharedPointer<FrameBuffer> frame);
|
2025-06-17 11:48:13 +08:00
|
|
|
void fbtTransDone(QSharedPointer<FrameBuffer> frame);
|
2025-06-17 16:42:39 +08:00
|
|
|
void fbtCanDown(QSharedPointer<FrameBuffer> frame);
|
|
|
|
|
void fbtCanotDown(QSharedPointer<FrameBuffer> frame);
|
|
|
|
|
void fbtFileBuffer(QSharedPointer<FrameBuffer> frame);
|
|
|
|
|
void fbtCanotSend(QSharedPointer<FrameBuffer> frame);
|
|
|
|
|
void fbtCanSend(QSharedPointer<FrameBuffer> frame);
|
|
|
|
|
void fbtTransFailed(QSharedPointer<FrameBuffer> frame);
|
2025-06-17 11:48:13 +08:00
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
void SendFile(const QSharedPointer<DoTransTask>& task);
|
2025-06-16 23:41:35 +08:00
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
DoTransTask downTask_;
|
2025-06-17 11:48:13 +08:00
|
|
|
|
|
|
|
|
QMutex lMut_;
|
|
|
|
|
QMutex rMut_;
|
|
|
|
|
QVector<TransTask> localTasks_;
|
|
|
|
|
QVector<TransTask> remoteTasks_;
|
|
|
|
|
|
2025-06-16 23:41:35 +08:00
|
|
|
ClientCore* clientCore_;
|
2025-06-17 11:48:13 +08:00
|
|
|
QMutex sthMut_;
|
|
|
|
|
QVector<QThread*> sendThreads_;
|
|
|
|
|
QMap<QString, QThread*> upTasks_;
|
2025-06-16 23:41:35 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif
|