jiubingdao
2025-07-30 923b017b4cafdd403b4dede621edfc8da925ec00
Server/¸¶ÁÖÌÎ/code/tianKai/vcsmainwindow.cpp
@@ -3,6 +3,10 @@
#include <QFileInfo>
#include <QMessageBox>
#include "struct_data.h"
std::mutex _mutex;
std::condition_variable _conv;
int g_flag = 1;
VCSMainWindow::VCSMainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::VCSMainWindow)
@@ -22,8 +26,10 @@
    ui->stackedWidget->setCurrentWidget(m_addFile);
    connect(m_addFile,SIGNAL(addFileSignal(QString, QString)),this,SLOT(addFileSlot(QString, QString)));
    connect(m_addFile,SIGNAL(addFileSignal(std::shared_ptr<char>,int)),this,SLOT(addFileSlot(std::shared_ptr<char>,int)));
    connect(this,SIGNAL(releaseSignal()),m_release,SLOT(releaseSlot()));
    connect(m_addFile,SIGNAL(addFileMsg(QString)),this,SLOT(msgSlot(QString)));
    connect(m_release,SIGNAL(releaseSignal(std::shared_ptr<char>,int)),this,SLOT(addFileSlot(std::shared_ptr<char>,int)));
}
VCSMainWindow::~VCSMainWindow()
@@ -36,9 +42,11 @@
    ui->stackedWidget->setCurrentWidget(m_addFile);
}
// ä¸Šä¼ 
void VCSMainWindow::on_pushButton_2_clicked()
{
    ui->stackedWidget->setCurrentWidget(m_release);
    emit releaseSignal();
}
void VCSMainWindow::on_pushButton_4_clicked()
@@ -51,115 +59,21 @@
    ui->stackedWidget->setCurrentWidget(m_readLog);
}
void VCSMainWindow::addFileSlot(QString file, QString versionMessage)
void VCSMainWindow::addFileSlot(std::shared_ptr<char> buf, int len)
{
    QFileInfo fileInfo(file);
    // èŽ·å–æ–‡ä»¶åŸºæœ¬ä¿¡æ¯
    QString fileName = fileInfo.fileName();
    qint64 size = fileInfo.size();
        if (!buf || len <= 0) {
    //  è®¡ç®—头消息长度,并分配空间
    int len = sizeof(UpLoadPkgHead)+fileName.size()+1;
    UpLoadPkgHead *head = (UpLoadPkgHead*)malloc(len);
    // å¤´æ¶ˆæ¯ä¿¡æ¯å¡«å……
    head->head.type = UPLOAD_REQ;
    head->head.len = len;
    head->upLoadType = HEAD_UPLOAD_REQ;
    head->fileNameLen = fileName.size();
    memcpy(head->fileName,fileName.data(),fileName.size());
    head->fileName[fileName.size()] = '\0';
    // å‘送头消息
    int ret = m_upLoad->upfile((char*)head,len);
    if(ret < len){
        qDebug()<<"传输有问题: ";
        free(head);
        head = nullptr;
        return ;
    }
    free(head);
    head = nullptr;
    QFile *pFile = new QFile(file);
    if(!pFile){
        return;
    }
    // è¯»æ–‡ä»¶å†…容
    if (!pFile->open(QIODevice::ReadOnly)) {
        qDebug() << "Failed to open file for reading:" << pFile->errorString();
        m_msg->warning(nullptr, "提示", "文件打开失败");
        return;
    }
    const int bufferSize = 8 * 1024;
    char buffer[bufferSize] = {0};
    qint64 totalBytesRead = 0;
    int flag = 0;
    while (!pFile->atEnd()) {
        qint64 bytesRead = pFile->read(buffer, bufferSize);
        if (bytesRead == -1) {
            qDebug() << "Error during read operation:" << pFile->errorString();
            break;
            return;
        }
        totalBytesRead += bytesRead;
        int dtlen = sizeof(UpLoadPkgData)+fileName.size()+bytesRead+2;
        UpLoadPkgData *dataPkg = (UpLoadPkgData *)malloc(dtlen);
        memset(dataPkg, 0, dtlen);
        dataPkg->head.len = len;
        dataPkg->head.type = UPLOAD_REQ;
        dataPkg->upLoadType = DATA_UPLOAD_REQ;
        dataPkg->fileNameLen = fileName.size();
        dataPkg->dataLen = bytesRead;
        dataPkg->flag = ++flag;
        memcpy(dataPkg->data,fileName.data(),fileName.size());
        dataPkg->data[fileName.size()] = '\0';
        strcpy(&(dataPkg->data[fileName.size()+1]),buffer);
        ret = m_upLoad->upfile((char*)dataPkg,dtlen);
        if(ret < dtlen){
            qDebug()<<"数据传输有问题";
            free(dataPkg);
            dataPkg = nullptr;
            m_msg->warning(nullptr, "提示", "数据传输有问题");
            return ;
        int ret = m_upLoad->upfile(buf, len);  // å¤„理数据
        if(ret < len){
            qDebug()<<"传输有问题";
        }
        free(dataPkg);
        dataPkg = nullptr;
    }
    if(totalBytesRead != size){
        qDebug()<<"数据发送不完整";
        m_msg->warning(nullptr, "提示", "数据发送不完整");
        return;
    }
    qDebug()<<"数据发送完成,发送数据库包";
    int finLen = sizeof(UpLoadPkgFin)+fileName.size()+versionMessage.size()+2;
    UpLoadPkgFin *finPkg = (UpLoadPkgFin *)malloc(finLen);
    finPkg->head.len = finLen;
    finPkg->head.type = UPLOAD_REQ;
    finPkg->fileNameLen = fileName.size();
    finPkg->cnt = flag;
    memcpy(finPkg->fileName,fileName.data(),fileName.size());
    finPkg->fileName[fileName.size()] = '\0';
    memcpy(&(finPkg->fileName[fileName.size()+1]),versionMessage.data(),versionMessage.size());
    finPkg->fileName[fileName.size()+versionMessage.size()+1] = '\0';
    ret = m_upLoad->upfile((char*)finPkg,finLen);
    if(ret < finLen){
        qDebug()<<"fin包传输有问题";
        free(finPkg);
        finPkg = nullptr;
        m_msg->warning(nullptr, "提示", "上传失败!");
        return ;
    }
    free(finPkg);
    finPkg = nullptr;
    qDebug()<<"数据库包发送完成";
    m_msg->information(nullptr, "提示", "上传成功!");
}
void VCSMainWindow::msgSlot(QString msg)
{
    m_msg->information(this,"提示",msg);
}