bugfix: loading process disable

This commit is contained in:
semenov
2025-01-16 11:12:46 +03:00
parent adbd8395ca
commit e7b13f4ec4
10 changed files with 54 additions and 84 deletions

View File

@@ -12,6 +12,11 @@ kanban-plugin: board
## bugs ## bugs
- [ ] QT сервер замерзает после выхода пользователя во время скачивания
- [ ] QT клиент, если обновление в режиме инструктора доступно, кнопку запуск отключать
- [ ] QT сервер При изменении версии правильный списке с файлами прилетает со второго раза
- [ ] QT сервер Найти причину двойного вызова проверки при логине инструктором
- [ ] QT клиент: device not open после прерывания загрузки
## feature client Unity ## feature client Unity
@@ -30,9 +35,8 @@ kanban-plugin: board
## feature server ## feature server
- [ ] Прибраться в Server
- [ ] рефакторинг
- [ ] добавить генерацию пустых файлов, если shared не найден - [ ] добавить генерацию пустых файлов, если shared не найден
- [ ] добавить подключение без DB
## NOW ## NOW
@@ -42,6 +46,9 @@ kanban-plugin: board
## Complete ## Complete
- [ ] рефакторинг
- [ ] Прибраться в Server
- [ ] не работает восстановление файлов
- [ ] запрет на удаление base - [ ] запрет на удаление base
- [ ] None hash - [ ] None hash
- [ ] сверстать окно создания новой версии - [ ] сверстать окно создания новой версии

View File

@@ -11,6 +11,8 @@ void CommonClientHandler::initialize(QMap<int, ClientHandler *> *clientsMap, Pro
this->processingSystem = processingSystem; this->processingSystem = processingSystem;
this->dataParser = dataParser; this->dataParser = dataParser;
this->logger = logger; this->logger = logger;
connect(this,&CommonClientHandler::sigSendToLogger,logger,&Logger::addTextToLogger,Qt::AutoConnection);
} }
void CommonClientHandler::sendNewVersionListToAllClient() void CommonClientHandler::sendNewVersionListToAllClient()
@@ -85,7 +87,8 @@ void CommonClientHandler::slot_msgToClientFromGUI(QString login, QString text)
QString str = "Msg To Client [" + peerAddress + ":" + peerPort + "] : " + textMsg; QString str = "Msg To Client [" + peerAddress + ":" + peerPort + "] : " + textMsg;
logger->addTextToLogger(str); emit sigSendToLogger(str);
break; break;
} }
} }
@@ -111,7 +114,7 @@ void CommonClientHandler::slot_msgToGUIfromClient(QString login, QString text)
QString str = "Msg From Client [" + peerAddress + ":" + peerPort + "] : " + textMsg; QString str = "Msg From Client [" + peerAddress + ":" + peerPort + "] : " + textMsg;
logger->addTextToLogger(str); emit sigSendToLogger(str);
break; break;
} }
} }
@@ -134,7 +137,7 @@ void CommonClientHandler::slot_sendTaskToClient(QString fullNameClient,QString t
QString peerPort = QString::number(handler->getSocket()->peerPort()); QString peerPort = QString::number(handler->getSocket()->peerPort());
QString str = "Task To Client [" + peerAddress + ":" + peerPort + "] : " + textTask; QString str = "Task To Client [" + peerAddress + ":" + peerPort + "] : " + textTask;
logger->addTextToLogger(str); emit sigSendToLogger(str);
} }
} }
} }

View File

@@ -27,7 +27,7 @@ public:
void slot_msgToGUIfromClient(QString login, QString text); void slot_msgToGUIfromClient(QString login, QString text);
void slot_sendTaskToClient(QString fullNameClient, QString textTask); void slot_sendTaskToClient(QString fullNameClient, QString textTask);
signals: signals:
void sigSendToLogger(QString text);
private: private:
QMap<int, ClientHandler*> *clientsMap; QMap<int, ClientHandler*> *clientsMap;
ProcessingSystem *processingSystem; ProcessingSystem *processingSystem;

View File

@@ -35,14 +35,22 @@ void SendSystem::sendMessageBlock(QString message)
void SendSystem::sendFileBlock(QString path) void SendSystem::sendFileBlock(QString path)
{ {
qDebug() << "sendFileBlock thread: " << QThread::currentThreadId(); qDebug() << "sendFileBlock thread: " << QThread::currentThreadId();
QFile file(path);
QFileInfo fileInfo(file);
if(isSendStopped)
{ //Поведение на случай отключения клиента
file.close();
return;
}
QDataStream stream(socket); QDataStream stream(socket);
stream.setVersion(QDataStream::Qt_DefaultCompiledVersion); stream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
QFile file(path);
QFileInfo fileInfo(file);
fileSize = fileInfo.size(); fileSize = fileInfo.size();
if(fileSize == 0){ if(fileSize == 0){
@@ -55,20 +63,19 @@ void SendSystem::sendFileBlock(QString path)
stream << path << fileSize; stream << path << fileSize;
if(isSendStopped) { //Поведение на случай отключения клиента
file.close();
return;
}
socket->waitForBytesWritten(); socket->waitForBytesWritten(10);
if(file.open(QFile::ReadOnly)){ if(file.open(QFile::ReadOnly))
while(!file.atEnd()){ {
while(!file.atEnd())
{
QByteArray data = file.read(1025*250); QByteArray data = file.read(1025*250);
stream << data; stream << data;
socket->waitForBytesWritten(); socket->waitForBytesWritten(10);
if(socket->state() == QAbstractSocket::UnconnectedState) break;
countSend++; countSend++;
} }
@@ -77,7 +84,7 @@ void SendSystem::sendFileBlock(QString path)
file.close(); file.close();
countSend = 0; countSend = 0;
socket->waitForBytesWritten(); socket->waitForBytesWritten(10);
socket->waitForReadyRead(100); socket->waitForReadyRead(100);
} }
@@ -237,11 +244,9 @@ void SendSystem::updateFiles(QList<FileData> fileSendList, QList<FileData> delet
socket->waitForReadyRead(100); socket->waitForReadyRead(100);
} }
if(getIsSendStopped()) return; if(isSendStopped) return;
} }
emit sigLoadHash(); emit sigLoadHash();
sendPacketType(PacketType::TYPE_FINISH); sendPacketType(PacketType::TYPE_FINISH);

View File

@@ -357,57 +357,6 @@ QList<FileData>* UpdateController::calculateHash(QString path)
} }
} }
serverDataList.append(*files); serverDataList.append(*files);
// QDirIterator iterator(path,QDirIterator::Subdirectories);
// QDir dir(path);
// dir.setFilter(QDir::NoDotAndDotDot);
// while (iterator.hasNext())
// {
// iterator.next();
// QFileInfo fileInfo = iterator.fileInfo();
// FileData currentFile;
// QFile file(fileInfo.absoluteFilePath());
// quint64 fileSize = file.size();
// const quint64 bufferSize = 10240;
// if (fileInfo.isHidden()) continue;
// if(fileInfo.isFile() && file.open(QIODevice::ReadOnly) && !fileInfo.fileName().contains(".meta"))
// {
// char buffer[bufferSize];
// int bytesRead;
// int readSize = qMin(fileSize,bufferSize);
// QCryptographicHash hash(QCryptographicHash::Md5);
// while(readSize > 0 && (bytesRead = file.read(buffer,readSize)) > 0){
// fileSize -= bytesRead;
// hash.addData(buffer,bytesRead);
// readSize = qMin(fileSize,bufferSize);
// }
// hashString = QString(hash.result().toHex());
// currentFile.hash = hashString;
// currentFile.path = Tools::createLocalPath(fileInfo.absoluteFilePath());
// files->push_back(currentFile);
// file.close();
// }
// else if(fileInfo.isDir() && fileInfo.fileName() != ".." && !fileInfo.isRoot())
// {
// currentFile.hash = "FOLDER";
// currentFile.path = Tools::createLocalPath(fileInfo.path());
// if(!files->contains(currentFile)){
// files->push_back(currentFile);
// }
// }
// }
// std::sort(files->begin(),files->end());
//
return files; return files;
} }

View File

@@ -54,6 +54,7 @@ void ClientHandler::initialize(int descriptor,ServerLMSWidget *serverWidget,
connect(this,&ClientHandler::sigSocketClose,sendSystem,&SendSystem::socketClose,Qt::AutoConnection); connect(this,&ClientHandler::sigSocketClose,sendSystem,&SendSystem::socketClose,Qt::AutoConnection);
connect(this,&ClientHandler::sigSocketFlush,sendSystem,&SendSystem::socketFlush,Qt::AutoConnection); connect(this,&ClientHandler::sigSocketFlush,sendSystem,&SendSystem::socketFlush,Qt::AutoConnection);
connect(this,&ClientHandler::sigSendPacketType,sendSystem,&SendSystem::sendPacketType,Qt::AutoConnection); connect(this,&ClientHandler::sigSendPacketType,sendSystem,&SendSystem::sendPacketType,Qt::AutoConnection);
connect(this,&ClientHandler::sigSendStop,sendSystem,&SendSystem::sendStop,Qt::DirectConnection);
connect(socket,&QTcpSocket::readyRead,recognizeSystem,&RecognizeSystem::recognize,Qt::AutoConnection); connect(socket,&QTcpSocket::readyRead,recognizeSystem,&RecognizeSystem::recognize,Qt::AutoConnection);
connect(socket, &QTcpSocket::disconnected, this, &ClientHandler::sendDisable,Qt::AutoConnection); connect(socket, &QTcpSocket::disconnected, this, &ClientHandler::sendDisable,Qt::AutoConnection);
@@ -129,8 +130,10 @@ void ClientHandler::sendNeedUpdate(bool flag, quint64 size, quint64 fileCount,qu
void ClientHandler::sendDisable() void ClientHandler::sendDisable()
{ {
thread->exit(); // thread->exit();
thread->wait(); // thread->wait();
thread->quit();
emit sigSendStop();
emit sigClientDisconnected(client->getAddress(),client->getPort()); emit sigClientDisconnected(client->getAddress(),client->getPort());
} }

View File

@@ -67,6 +67,7 @@ signals:
bool sigSocketFlush(); bool sigSocketFlush();
void sigSendVersion(); void sigSendVersion();
void sigSendPacketType(PacketType packetType); void sigSendPacketType(PacketType packetType);
void sigSendStop();
public : public :
QThread *thread; QThread *thread;

View File

@@ -8,7 +8,7 @@ MultiThreadServer::MultiThreadServer(ServerLMSWidget *widget,UpdateController *u
dataParser(dataParser), dataParser(dataParser),
logger(logger) logger(logger)
{ {
connect(this,&MultiThreadServer::sigSendToLogger,logger,&Logger::addTextToLogger);
} }
void MultiThreadServer::incomingConnection(qintptr socketDesriptor) void MultiThreadServer::incomingConnection(qintptr socketDesriptor)
@@ -16,14 +16,14 @@ void MultiThreadServer::incomingConnection(qintptr socketDesriptor)
ClientHandler* newClient = new ClientHandler; ClientHandler* newClient = new ClientHandler;
connect(this,&MultiThreadServer::sigInitClient,newClient,&ClientHandler::initialize,Qt::AutoConnection); connect(this,&MultiThreadServer::sigInitClient,newClient,&ClientHandler::initialize,Qt::AutoConnection);
connect(newClient,&ClientHandler::sigClientDisconnected,this,&MultiThreadServer::slotDisconnectClient,Qt::QueuedConnection); connect(newClient,&ClientHandler::sigClientDisconnected,this,&MultiThreadServer::slotDisconnectClient,Qt::AutoConnection);
emit sigInitClient(socketDesriptor,serverLmsWidget,updateController,dataParser,logger); emit sigInitClient(socketDesriptor,serverLmsWidget,updateController,dataParser,logger);
disconnect(this,&MultiThreadServer::sigInitClient,newClient,&ClientHandler::initialize); disconnect(this,&MultiThreadServer::sigInitClient,newClient,&ClientHandler::initialize);
serverLmsWidget->addClient(socketDesriptor,newClient); serverLmsWidget->addClient(socketDesriptor,newClient);
logger->addTextToLogger("To Client: " + QString(SERVER_HELLO)); emit sigSendToLogger("To Client: " + QString(SERVER_HELLO));
} }
void MultiThreadServer::slotDisconnectClient(QString peerAddress, QString peerPort) void MultiThreadServer::slotDisconnectClient(QString peerAddress, QString peerPort)
@@ -53,8 +53,7 @@ void MultiThreadServer::slotDisconnectClient(QString peerAddress, QString peerPo
} }
emit signalStopSendFile(); emit signalStopSendFile();
emit sigSendToLogger("SERVER: Client " + login + " disconnected");
logger->addTextToLogger("SERVER: Client " + login + " disconnected");
serverLmsWidget->slotUpdateListClients(); serverLmsWidget->slotUpdateListClients();
serverLmsWidget->autorizationHandler(login); serverLmsWidget->autorizationHandler(login);

View File

@@ -18,6 +18,7 @@ signals:
void sigInitClient(int descriptor, ServerLMSWidget *serverWidget, void sigInitClient(int descriptor, ServerLMSWidget *serverWidget,
UpdateController *updateController, DataParser *dataParser,Logger *logger); UpdateController *updateController, DataParser *dataParser,Logger *logger);
void signalStopSendFile(); void signalStopSendFile();
void sigSendToLogger(QString text);
public slots: public slots:
void slotDisconnectClient(QString peerAddress, QString peerPort); void slotDisconnectClient(QString peerAddress, QString peerPort);

View File

@@ -14,7 +14,7 @@ ServerLMSWidget::ServerLMSWidget(QWidget *parent) :
tcpServer(nullptr), tcpServer(nullptr),
hostPort(6000), hostPort(6000),
stateServer(stoped), stateServer(stoped),
stateBlockAutorization(blocked), stateBlockAutorization(unblocked),
updateThread(nullptr), updateThread(nullptr),
loggerThread(nullptr), loggerThread(nullptr),
dataParser(nullptr), dataParser(nullptr),
@@ -44,11 +44,13 @@ ServerLMSWidget::ServerLMSWidget(QWidget *parent) :
loggerThread = new QThread; loggerThread = new QThread;
providerDBLMS = new ProviderDBLMS(this); providerDBLMS = new ProviderDBLMS(this);
connect(providerDBLMS, &ProviderDBLMS::signal_BlockAutorization, this, &ServerLMSWidget::slot_BlockAutorization);
providerDBLMS->ConnectionToDB(); providerDBLMS->ConnectionToDB();
logger = new Logger(ui->listWidgetLogger); logger = new Logger(ui->listWidgetLogger);
connect(logger,&Logger::sigSendTextToLogger,this,&ServerLMSWidget::slotAddToLog,Qt::QueuedConnection);
connect(providerDBLMS, &ProviderDBLMS::signal_BlockAutorization, this, &ServerLMSWidget::slot_BlockAutorization);
connect(logger,&Logger::sigSendTextToLogger,this,&ServerLMSWidget::slotAddToLog,Qt::AutoConnection);
logger->moveToThread(loggerThread); logger->moveToThread(loggerThread);
assetsManager = new AssetsManager; assetsManager = new AssetsManager;
@@ -194,7 +196,7 @@ void ServerLMSWidget::slotUpdateListClients()
} }
int countClients = clientsMap.count(); int countClients = clientsMap.count();
logger->addTextToLogger("SERVER: countClients = " + QString::number(countClients)); emit sigLog("SERVER: countClients = " + QString::number(countClients));
} }
void ServerLMSWidget::slot_BlockAutorization(bool block) void ServerLMSWidget::slot_BlockAutorization(bool block)