#include "sendsystem.h" SendSystem::SendSystem(QObject *) {} void SendSystem::initialize(MainWindow *mainWindow,DataParser *dataParser) { this->mainWindow = mainWindow; connect(this,&SendSystem::sigSend,mainWindow,&MainWindow::updateProgress); connect(this,&SendSystem::sigGetXmlAnswer,dataParser,&DataParser::xmlAnswer_notify,Qt::DirectConnection); //МОЖЕТ ДАТУ ПАРСЕР В ВТОРОСТЕПЕННЫЙ ПОТОК? } void SendSystem::setSocket(QTcpSocket *socket) { this->socket = socket; } void SendSystem::xmlAnswer(QString message) { QDataStream stream(socket); stream.setVersion(QDataStream::Qt_DefaultCompiledVersion); QByteArray data; data = emit sigGetXmlAnswer(message); stream << PacketType::TYPE_XMLANSWER; stream << data; qDebug() << "Send answer " + message; socket->waitForBytesWritten(); } void SendSystem::sendClientAutorization() { QDataStream stream(socket); stream.setVersion(QDataStream::Qt_DefaultCompiledVersion); QFile file(tempName); file.open(QIODevice::ReadOnly); QByteArray array = file.readAll(); stream << PacketType::TYPE_XMLANSWER; stream << array; socket->waitForBytesWritten(); qDebug() << "Send client auth"; file.close(); } void SendSystem::sendFileBlock(QString path) { QDataStream stream(socket); stream.setVersion(QDataStream::Qt_DefaultCompiledVersion); QString fullPath = Tools::createSendFullPath(path); quint64 fileSize = 0; int countSend = 0; QFile file(fullPath); //Открываем файл для чтения QFileInfo fileInfo(file); fileSize = fileInfo.size(); stream << PacketType::TYPE_FILE; //Отправляем тип блока stream << path << fileSize; socket->waitForReadyRead(20); //socket->waitForBytesWritten(); if(file.open(QFile::ReadOnly)){ while(!file.atEnd()){ QByteArray data = file.read(1025*250); stream << data; socket->waitForBytesWritten(20); countSend++; } qDebug() << Tools::getTime() << "count end Final: " << countSend; } file.close(); emit sigSend(); //qDebug() << "Transaction after send file: " << socket->isTransactionStarted(); countSend = 0; //socket->waitForBytesWritten(); socket->waitForReadyRead(20); } void SendSystem::sendFolderBlock(QString path) { QDataStream stream(socket); stream.setVersion(QDataStream::Qt_DefaultCompiledVersion); stream << PacketType::TYPE_FOLDER; stream << path; emit sigSend(); socket->waitForReadyRead(100); } void SendSystem::sendFileBlockWithVersion(QString localPath,QString serverPath) { QDataStream stream(socket); stream.setVersion(QDataStream::Qt_DefaultCompiledVersion); //QString fullPath = Tools::createLocalPath(localPath); quint64 fileSize = 0; int countSend = 0; QFile file(localPath); //Открываем файл для чтения QFileInfo fileInfo(file); fileSize = fileInfo.size(); stream << PacketType::TYPE_FILE; //Отправляем тип блока stream << serverPath << fileSize; socket->waitForReadyRead(20); //socket->waitForBytesWritten(); if(file.open(QFile::ReadOnly)){ while(!file.atEnd()){ QByteArray data = file.read(1025*250); stream << data; socket->waitForBytesWritten(10); countSend++; } qDebug() << Tools::getTime() << "count end Final: " << countSend; } file.close(); emit sigSend(); //qDebug() << "Transaction after send file: " << socket->isTransactionStarted(); countSend = 0; //socket->waitForBytesWritten(); socket->waitForReadyRead(20); } void SendSystem::sendQTConnect() { //QString value = QString::number(PacketType::TYPE_QT); QByteArray container; int numPackage = (int)PacketType::TYPE_QT; container.append(numPackage & 0x000000ff); container.append((numPackage >> 8) & 0x000000ff); container.append((numPackage >> 16) & 0x000000ff); container.append((numPackage >> 24) & 0x000000ff); socket->write(container); socket->waitForBytesWritten(); } void SendSystem::sendXMLAnswer(QByteArray array) { QDataStream stream(socket); stream.setVersion(QDataStream::Qt_DefaultCompiledVersion); stream << PacketType::TYPE_XMLANSWER; stream << array; socket->waitForBytesWritten(); socket->waitForReadyRead(100); qDebug() << "Send XML answer in byte"; } void SendSystem::sendFinish() { socket->waitForReadyRead(100); QDataStream stream(socket); stream.setVersion(QDataStream::Qt_DefaultCompiledVersion); stream << PacketType::TYPE_FINISH; socket->waitForReadyRead(100); } void SendSystem::sendChangeVersion(StreamingVersionData* streamingVersion) { QDataStream stream(socket); stream.setVersion(QDataStream::Qt_DefaultCompiledVersion); stream << PacketType::CHANGE_DATA_VERSION; stream << streamingVersion->getViewName(); socket->waitForReadyRead(100); } void SendSystem::sendDeleteVersion(StreamingVersionData *streamingVersion) { QDataStream stream(socket); stream.setVersion(QDataStream::Qt_DefaultCompiledVersion); stream << PacketType::DELETE_DATA_VERSION; stream << streamingVersion->getViewName(); socket->waitForReadyRead(100); } void SendSystem::sendCopyVersion(QString streamingVersion) { QDataStream stream(socket); stream.setVersion(QDataStream::Qt_DefaultCompiledVersion); stream << PacketType::COPY_VERSION; stream << streamingVersion; } void SendSystem::sendPacketType(PacketType packetType) { QDataStream stream(socket); QByteArray data; stream.setVersion(QDataStream::Qt_DefaultCompiledVersion); stream << packetType; } void SendSystem::sendCheckHash() { QDataStream stream(socket); QByteArray data; stream.setVersion(QDataStream::Qt_DefaultCompiledVersion); sendFileBlock(staticDataFolderName + hashFilename); socket->waitForReadyRead(2000); stream << PacketType::TYPE_CHECK_VERSION; } SendSystem::~SendSystem() { }