Files
frelay/ClientCore/FileTrans.h

98 lines
2.1 KiB
C
Raw Normal View History

2025-06-16 23:41:35 +08:00
#ifndef FILETRANS_H
#define FILETRANS_H
#include <QFile>
#include <QFuture>
2025-06-16 23:41:35 +08:00
#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"
constexpr int MAX_SEND_TASK = 10;
2025-06-16 23:41:35 +08:00
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:
bool isSuccess_{false};
2025-06-17 11:48:13 +08:00
ClientCore* cliCore_;
quint32 curSendCount_{0};
2025-06-17 11:48:13 +08:00
QSharedPointer<DoTransTask> task_;
};
2025-06-16 23:41:35 +08:00
class FileTrans : public QObject
{
Q_OBJECT
2025-06-18 13:18:31 +08:00
2025-06-16 23:41:35 +08:00
public:
FileTrans(ClientCore* clientCore);
public:
2025-06-18 13:18:31 +08:00
void ReqSendFile(const TransTask& task);
void ReqDownFile(const TransTask& task);
qint32 GetSendProgress();
qint32 GetDownProgress();
2025-06-16 23:41:35 +08:00
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);
2025-06-20 09:45:39 +08:00
void fbtFileInfo(QSharedPointer<FrameBuffer> frame);
2025-06-17 16:42:39 +08:00
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 RegisterSignal();
2025-06-17 11:48:13 +08:00
void SendFile(const QSharedPointer<DoTransTask>& task);
2025-06-16 23:41:35 +08:00
private:
2025-06-18 14:53:56 +08:00
QSharedPointer<DoTransTask> downTask_;
QSharedPointer<DoTransTask> sendTask_;
2025-06-17 11:48:13 +08:00
QMutex lMut_;
QMutex rMut_;
2025-06-16 23:41:35 +08:00
ClientCore* clientCore_;
2025-06-17 11:48:13 +08:00
QMutex sthMut_;
QMap<QString, QThread*> upTasks_;
2025-06-16 23:41:35 +08:00
};
#endif