#include "vcsmainwindow.h"
|
#include "ui_vcsmainwindow.h"
|
|
#include <QFileInfo>
|
#include <QMessageBox>
|
VCSMainWindow::VCSMainWindow(QWidget *parent) :
|
QMainWindow(parent),
|
ui(new Ui::VCSMainWindow)
|
{
|
ui->setupUi(this);
|
m_addFile = new AddFile(this);
|
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()
|
{
|
delete ui;
|
}
|
|
void VCSMainWindow::on_pushButton_clicked()
|
{
|
ui->stackedWidget->setCurrentWidget(m_addFile);
|
}
|
|
void VCSMainWindow::on_pushButton_2_clicked()
|
{
|
ui->stackedWidget->setCurrentWidget(m_release);
|
}
|
|
void VCSMainWindow::on_pushButton_4_clicked()
|
{
|
ui->stackedWidget->setCurrentWidget(m_rollBack);
|
}
|
|
void VCSMainWindow::on_pushButton_3_clicked()
|
{
|
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, "提示", "上传成功!");
|
|
}
|