fertao
2025-07-28 ec576f7460a1c172f47758a4edcaa846e49db4d2
Server/¸¶ÁÖÌÎ/code/tianKai/vcsmainwindow.cpp
@@ -1,6 +1,8 @@
#include "vcsmainwindow.h"
#include "ui_vcsmainwindow.h"
#include <QFileInfo>
#include <QMessageBox>
VCSMainWindow::VCSMainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::VCSMainWindow)
@@ -10,13 +12,18 @@
    m_release = new Release(this);
    m_rollBack = new RollBack(this);
    m_readLog = new ReadLog(this);
    m_upLoad = new UpLoador(this);
    m_msg = new QMessageBox(this);
    ui->stackedWidget->addWidget(m_addFile);
    ui->stackedWidget->addWidget(m_release);
    ui->stackedWidget->addWidget(m_rollBack);
    ui->stackedWidget->addWidget(m_readLog);
    ui->stackedWidget->setCurrentWidget(m_addFile);
    connect(m_addFile,SIGNAL(addFileSignal(QString, QString)),this,SLOT(addFileSlot(QString, QString)));
}
VCSMainWindow::~VCSMainWindow()
@@ -43,3 +50,116 @@
{
    ui->stackedWidget->setCurrentWidget(m_readLog);
}
void VCSMainWindow::addFileSlot(QString file, QString versionMessage)
{
    QFileInfo fileInfo(file);
    // èŽ·å–æ–‡ä»¶åŸºæœ¬ä¿¡æ¯
    QString fileName = fileInfo.fileName();
    qint64 size = fileInfo.size();
    //  è®¡ç®—头消息长度,并分配空间
    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;
        }
        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 ;
        }
        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, "提示", "上传成功!");
}