16 Commits
v0.66 ... v0.81

Author SHA1 Message Date
semenov
918d391a68 fix: update from instructor 2026-01-12 10:26:29 +03:00
semenov
775f5cd0a4 fix: position 2025-12-17 16:39:23 +03:00
semenov
75a93e346b fix: blocked behaviour 2025-12-17 16:33:12 +03:00
semenov
4e15a439ee feat: add new states 2025-12-17 16:18:14 +03:00
semenov
9e202f8e5d fix: version name after download 2025-12-12 12:58:31 +03:00
semenov
c23f3d519b fix: server changable version 2025-12-12 11:34:02 +03:00
semenov
14c1ffb66f quickfix: offline start 2025-12-09 09:29:15 +03:00
semenov
5b63141ddf bugfix: links 2025-11-28 16:51:38 +03:00
semenov
6665f417c9 feat: add client information 2025-11-20 17:20:52 +03:00
semenov
633881847b bugfix: ui behaviour 2025-11-20 15:58:19 +03:00
semenov
a2e64ecb68 bugfix: update without hot update 2025-11-20 12:14:34 +03:00
semenov
4829647e98 feat: add send scenario 2025-11-18 12:04:31 +03:00
semenov
b706de2961 fix: hex 2025-10-29 11:26:03 +03:00
semenov
a4d4709118 fix: reconnect with old connection 2025-09-23 10:20:17 +03:00
semenov
60c3d6244e feat: fast hash checker 2025-09-23 09:23:04 +03:00
semenov
c9c62d22c0 bugfix: auto-start init 2025-09-19 09:23:35 +03:00
47 changed files with 30426 additions and 203 deletions

37
ClientMPS_resource.rc Normal file
View File

@@ -0,0 +1,37 @@
#include <windows.h>
IDI_ICON1 ICON DISCARDABLE "D:\\QT\\Projects\\RRJClient\\resource\\Icons\\planeCustomIco.ico"
VS_VERSION_INFO VERSIONINFO
FILEVERSION 0,0,0,0
PRODUCTVERSION 0,0,0,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
#else
FILEFLAGS 0x0L
#endif
FILEOS VOS__WINDOWS32
FILETYPE VFT_DLL
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "\0"
VALUE "FileDescription", "\0"
VALUE "FileVersion", "0.0.0.0\0"
VALUE "LegalCopyright", "\0"
VALUE "OriginalFilename", "ClientMPS.exe\0"
VALUE "ProductName", "ClientMPS\0"
VALUE "ProductVersion", "0.0.0.0\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x0409, 1200
END
END
/* End of Version info */

View File

@@ -1,6 +1,7 @@
#include "UpdateController.h" #include "UpdateController.h"
#include <QElapsedTimer>
#include <QThread> #include <QThread>
UpdateController::UpdateController(QObject *parent) : UpdateController::UpdateController(QObject *parent) :
@@ -8,6 +9,7 @@ UpdateController::UpdateController(QObject *parent) :
versionContainer(nullptr) versionContainer(nullptr)
{ {
applicationFolderPath = QDir::currentPath() + applicationFolderName; applicationFolderPath = QDir::currentPath() + applicationFolderName;
hashCalculator = new FastHashCalculator;
} }
void UpdateController::initialize(VersionContainer *versionContainer,DataParserOutput *dataParserOut, SendSystem *sendSystem) void UpdateController::initialize(VersionContainer *versionContainer,DataParserOutput *dataParserOut, SendSystem *sendSystem)
@@ -20,18 +22,26 @@ void UpdateController::initialize(VersionContainer *versionContainer,DataParserO
void UpdateController::calculateCommonHash() void UpdateController::calculateCommonHash()
{ {
appDataList.clear(); appDataList.clear();
appDataList = calculateHash(applicationFolderPath,"StreamingAssets"); QElapsedTimer timer;
timer.start();
qDebug() << "Start calculate... ";
hashCalculator->calculateHashes(applicationFolderPath,"StreamingAssets");
appDataList = *hashCalculator->getHashList();
calculateStreamingHash(); calculateStreamingHash();
appDataList.append(streamingDataList); appDataList.append(streamingDataList);
qDebug() << "Hash count: " << appDataList.count() ;
dataParserOut->createFileDataList(appDataList,fullStaticDataFolderName + hashFilename); dataParserOut->createFileDataList(appDataList,fullStaticDataFolderName + hashFilename);
qDebug() << "UpdateController threadID " << QThread::currentThreadId(); qDebug() << "UpdateController threadID " << QThread::currentThreadId();
qDebug() <<"Calculate time " << timer.elapsed();
} }
void UpdateController::calculateStreamingHash() void UpdateController::calculateStreamingHash()
{ {
streamingDataList.clear(); streamingDataList.clear();
streamingDataList = calculateHash(QDir::currentPath() + streamingAssetsPath,""); hashCalculator->calculateHashes(QDir::currentPath() + streamingAssetsPath,"");
std::sort(streamingDataList.begin(),streamingDataList.end()); streamingDataList = *hashCalculator->getHashList();
dataParserOut->createFileDataList(streamingDataList,streamingHashFilename); dataParserOut->createFileDataList(streamingDataList,streamingHashFilename);
} }
@@ -45,7 +55,6 @@ QList<FileData> UpdateController::calculateHash(const QString& path,const QStrin
} }
QList<FileData> *hashes = new QList<FileData>; QList<FileData> *hashes = new QList<FileData>;
QString fullSize = Tools::convertFileSize(getDirectorySize(path),false);
quint64 currentSize = 0; quint64 currentSize = 0;
QStringList filter; QStringList filter;
@@ -82,9 +91,9 @@ QList<FileData> UpdateController::calculateHash(const QString& path,const QStrin
currentSize += fileInfo.size(); currentSize += fileInfo.size();
emit sigSendHashInfo(fullSize,Tools::convertFileSize(currentSize,false));
quint64 fileSize = file.size(); //буффер для хэширования крупных файлов quint64 fileSize = file.size(); //буффер для хэширования крупных файлов
const quint64 bufferSize = 10240; const quint64 bufferSize = 1024;
if(fileInfo.isHidden()) continue; if(fileInfo.isHidden()) continue;
if(ignoreName != "" && fileInfo.path().contains(ignoreName)) continue; if(ignoreName != "" && fileInfo.path().contains(ignoreName)) continue;
@@ -115,24 +124,6 @@ QList<FileData> UpdateController::calculateHash(const QString& path,const QStrin
return *hashes; return *hashes;
} }
quint64 UpdateController::getDirectorySize(const QString& path)
{
quint64 totalSize = 0;
QDirIterator iterator(path, QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);
while (iterator.hasNext())
{
iterator.next();
QFileInfo fileInfo = iterator.fileInfo();
if (fileInfo.isFile())
{
totalSize += fileInfo.size();
}
}
return totalSize;
}
void UpdateController::updateFilesOnServer(QList<FileData> *fileSendList){ void UpdateController::updateFilesOnServer(QList<FileData> *fileSendList){
QListIterator<FileData> serverIterator(*fileSendList); QListIterator<FileData> serverIterator(*fileSendList);
@@ -155,8 +146,7 @@ void UpdateController::updateFilesOnServer(QList<FileData> *fileSendList){
} }
calculateCommonHash(); calculateCommonHash();
sendSystem->sendFinish(); sendSystem->sendPacketType(PacketType::RECALCULATE_DOCS);
emit sigUpdateComplete(true); emit sigUpdateComplete(true);
} }
catch (...) catch (...)
@@ -166,6 +156,11 @@ void UpdateController::updateFilesOnServer(QList<FileData> *fileSendList){
} }
FastHashCalculator *UpdateController::getHashCalculator() const
{
return hashCalculator;
}
UpdateController::~UpdateController() UpdateController::~UpdateController()
{ {

View File

@@ -3,6 +3,7 @@
#include "Core/sendsystem.h" #include "Core/sendsystem.h"
#include "Core/versioncontainer.h" #include "Core/versioncontainer.h"
#include "fasthashcalculator.h"
#include <QXmlStreamWriter> #include <QXmlStreamWriter>
#include <QXmlStreamReader> #include <QXmlStreamReader>
#include <QXmlStreamAttribute> #include <QXmlStreamAttribute>
@@ -34,19 +35,21 @@ public:
void updateFilesOnServer(QList<FileData> *fileSendList); void updateFilesOnServer(QList<FileData> *fileSendList);
void checkCanUpdate(); void checkCanUpdate();
FastHashCalculator *getHashCalculator() const;
signals: signals:
void sigUpdateComplete(bool flag); void sigUpdateComplete(bool flag);
void sigSendHashInfo(QString fullSize,QString current);
private: private:
SendSystem *sendSystem; SendSystem *sendSystem;
DataParserOutput * dataParserOut; DataParserOutput * dataParserOut;
FastHashCalculator* hashCalculator;
QString applicationFolderPath; QString applicationFolderPath;
VersionContainer *versionContainer; VersionContainer *versionContainer;
QList<FileData> appDataList; QList<FileData> appDataList;
QList<FileData> streamingDataList; QList<FileData> streamingDataList;
QList<FileData> calculateHash(const QString& path,const QString& ignoreName); QList<FileData> calculateHash(const QString& path,const QString& ignoreName);
quint64 getDirectorySize(const QString &path);
}; };

View File

@@ -15,9 +15,9 @@ void DataParser::initialize(PostProcessorSystem *postProcessSystem)
} }
ServerSettings *DataParser::getClientSettings() Settings *DataParser::getSettings()
{ {
ServerSettings *settings = new ServerSettings; Settings *settings = new Settings;
QFile file(settingsName); QFile file(settingsName);
file.open(QIODevice::ReadOnly); file.open(QIODevice::ReadOnly);
QXmlStreamReader xmlReader(&file); QXmlStreamReader xmlReader(&file);
@@ -95,9 +95,10 @@ ServerSettings *DataParser::getClientSettings()
return settings; return settings;
} }
void DataParser::xmlParser(const QByteArray& array) bool DataParser::xmlParser(const QByteArray& array)
{ {
QXmlStreamReader xmlReader(array); QXmlStreamReader xmlReader(array);
bool result = false;
xmlReader.readNext(); xmlReader.readNext();
@@ -134,14 +135,29 @@ void DataParser::xmlParser(const QByteArray& array)
if (value == "UNCHANGEABLE") if (value == "UNCHANGEABLE")
{ {
//версию нельзя изменять result = true;
} }
if (value == "CHANGEABLE") if (value == "CHANGEABLE")
{ {
postProcessSystem->compareFiles(); postProcessSystem->compareFiles();
//emit sigUpdateFilesOnServer(hashComparer->getFilesForUpdate());
} }
if (value == "ERROR_AUTH_ARCHIVED")
{
postProcessSystem->userArchived();
}
if (value == "ERROR_AUTH_LOGINORPASSWORD")
{
postProcessSystem->wrongLoginOrPass();
}
if (value == "ERROR_AUTH_ALREADYLOGIN")
{
postProcessSystem->alreadyLogin();
}
} }
} }
} }
@@ -227,7 +243,7 @@ void DataParser::xmlParser(const QByteArray& array)
QString name = attr.name().toString(); QString name = attr.name().toString();
QString value = attr.value().toString(); QString value = attr.value().toString();
if(name == "Version") if (name == "Version")
data->setName(value); data->setName(value);
else if(name == "Created") else if(name == "Created")
data->setCreateData(QDateTime::fromString(value)); data->setCreateData(QDateTime::fromString(value));
@@ -247,4 +263,5 @@ void DataParser::xmlParser(const QByteArray& array)
xmlReader.readNext(); xmlReader.readNext();
} }
return result;
} }

View File

@@ -6,7 +6,6 @@
#include <QObject> #include <QObject>
#include <QDomDocument> #include <QDomDocument>
#include <QXmlStreamWriter> #include <QXmlStreamWriter>
#include <Data/FileData.h>
#include <Data/Datas.h> #include <Data/Datas.h>
#include <Data/FileData.h> #include <Data/FileData.h>
#include <Core/tools.h> #include <Core/tools.h>
@@ -21,8 +20,8 @@ public:
~DataParser() = default; ~DataParser() = default;
void initialize(PostProcessorSystem *postProcessSystem); void initialize(PostProcessorSystem *postProcessSystem);
ServerSettings* getClientSettings(); Settings* getSettings();
void xmlParser(const QByteArray& array); bool xmlParser(const QByteArray& array);
private: private:
PostProcessorSystem *postProcessSystem; PostProcessorSystem *postProcessSystem;
}; };

View File

@@ -77,7 +77,6 @@ QByteArray DataParserOutput::xmlAnswer(const QList<SXmlAnswerTag>& listTag, cons
return array; return array;
} }
void DataParserOutput::createFileDataList(const QList<FileData>& fileDataList,const QString& filename) void DataParserOutput::createFileDataList(const QList<FileData>& fileDataList,const QString& filename)
{ {
QFile file(filename); QFile file(filename);
@@ -126,9 +125,10 @@ void DataParserOutput::createAuthMessage(ClientAutorization *auth)
file.close(); file.close();
} }
void DataParserOutput::createServerSettings(ServerSettings* serverSettings) void DataParserOutput::createServerSettings()
{ {
QFile file(settingsName); QFile file(settingsName);
if (file.exists()) return;
file.open(QIODevice::WriteOnly); file.open(QIODevice::WriteOnly);
@@ -140,13 +140,43 @@ void DataParserOutput::createServerSettings(ServerSettings* serverSettings)
xmlWriter.writeStartElement("ServerSettingsContainer"); xmlWriter.writeStartElement("ServerSettingsContainer");
xmlWriter.writeStartElement("ServerSettings"); xmlWriter.writeStartElement("ServerSettings");
xmlWriter.writeAttribute("Address","");
xmlWriter.writeAttribute("Port","");
xmlWriter.writeAttribute("Language","RUS");
xmlWriter.writeAttribute("AutoStart",QString::number(false));
xmlWriter.writeEndElement();
xmlWriter.writeStartElement("VersionData");
xmlWriter.writeAttribute("Version","-----");
xmlWriter.writeAttribute("isChangable","0");
xmlWriter.writeEndElement();
xmlWriter.writeEndElement();
xmlWriter.writeEndDocument();
file.close();
}
void DataParserOutput::updateServerSettings(Settings* serverSettings)
{
QFile file(settingsName);
file.open(QIODevice::WriteOnly);
QXmlStreamWriter xmlWriter(&file);
xmlWriter.setAutoFormatting(true);
xmlWriter.writeStartDocument();
xmlWriter.writeStartElement("ServerSettingsContainer");
xmlWriter.writeStartElement("ServerSettings");
xmlWriter.writeAttribute("Address",serverSettings->Address); xmlWriter.writeAttribute("Address",serverSettings->Address);
xmlWriter.writeAttribute("Port",serverSettings->Port); xmlWriter.writeAttribute("Port",serverSettings->Port);
xmlWriter.writeAttribute("Language","RUS"); xmlWriter.writeAttribute("Language","RUS");
xmlWriter.writeAttribute("AutoStart",QString::number(false)); xmlWriter.writeAttribute("AutoStart",QString::number(false));
xmlWriter.writeAttribute("DestPortMath","18003");
xmlWriter.writeAttribute("LocalPortMath","18004");
xmlWriter.writeAttribute("UseMathModel",QString::number(serverSettings->mathModelUse));
xmlWriter.writeEndElement(); xmlWriter.writeEndElement();

View File

@@ -17,7 +17,8 @@ public:
explicit DataParserOutput(QObject *parent = 0); explicit DataParserOutput(QObject *parent = 0);
void createFileDataList(const QList<FileData>& fileDataList,const QString& filename); void createFileDataList(const QList<FileData>& fileDataList,const QString& filename);
void createAuthMessage(ClientAutorization *auth); void createAuthMessage(ClientAutorization *auth);
void createServerSettings(ServerSettings *serverSettings); void createServerSettings();
void updateServerSettings(Settings *serverSettings);
void changeVersion(StreamingVersionData *versionData); void changeVersion(StreamingVersionData *versionData);
void createAuthData(ServerAuthorization *serverAuth); void createAuthData(ServerAuthorization *serverAuth);
void createAuthDataOffline(const QString& username,const QString& pass); void createAuthDataOffline(const QString& username,const QString& pass);

127
Core/fasthashcalculator.cpp Normal file
View File

@@ -0,0 +1,127 @@
#include "fasthashcalculator.h"
#include <QtConcurrent>
FastHashCalculator::FastHashCalculator(QObject *parent) : QObject(parent)
{
hashList = new QList<FileData>();
}
void FastHashCalculator::calculateHashes(const QString& path, const QString& ignoreName)
{
hashList->clear();
currentSize = 0;
if(!QDir(path).exists()){
QDir().mkdir(path);
}
QString hashString;
QStringList filter;
filter << "*";
QList<FileData> *folders = new QList<FileData>;
fullSize = Tools::convertFileSize(getDirectorySize(path),false);
//только папки
QDirIterator dirIterator(path,filter, QDir::AllEntries, QDirIterator::Subdirectories);
while (dirIterator.hasNext())
{
QFileInfo fileInfo(dirIterator.next());
FileData currentFolder;
if(fileInfo.isDir() && !fileInfo.fileName().startsWith(".") && fileInfo.fileName() != "RRJLoader")
{
currentFolder.path = Tools::createLocalPath(fileInfo.absoluteFilePath());
currentFolder.hash = "FOLDER";
if(!folders->contains(currentFolder))
{
folders->push_back(currentFolder);
}
}
}
//только файлы
QDirIterator fileIterator(path,filter,QDir::Files | QDir::NoDotAndDotDot,QDirIterator::Subdirectories);
QList<QString> files;
files.clear();
while(fileIterator.hasNext())
{
fileIterator.next();
QFileInfo fileInfo = fileIterator.fileInfo();
QString path = fileInfo.absoluteFilePath();
if (fileInfo.isHidden()) continue;
if (!fileInfo.isFile()) continue;
if (fileInfo.fileName().contains(".meta")) continue;
if (ignoreName != "" && fileInfo.path().contains(ignoreName)) continue;
files.append(path);
}
QtConcurrent::map(files, [this](const QString &filePath)
{
QByteArray hash = calculateFileHashOptimized(filePath);
QMutexLocker locker(&_mutex);
FileData currentFile;
QString hashName;
currentFile.path = Tools::createLocalPath(filePath);
currentFile.hash = hash.toHex();
hashList->append(currentFile);
}).waitForFinished();
hashList->append(*folders);
emit finished();
}
QByteArray FastHashCalculator::calculateFileHashOptimized(const QString &filePath)
{
QFile file(filePath);
if (!file.open(QIODevice::ReadOnly)) return QByteArray();
QCryptographicHash hash(QCryptographicHash::Md5);
const qint64 bufferSize = 2048; // 2MB
quint64 completeBytes = 0;
QByteArray buffer;
buffer.resize(bufferSize);
while (!file.atEnd()) {
qint64 bytesRead = file.read(buffer.data(), bufferSize);
hash.addData(buffer.constData(), bytesRead);
completeBytes += bytesRead;
}
hashCounterDisplay(completeBytes);
return hash.result();
}
void FastHashCalculator::hashCounterDisplay(quint64 size)
{
currentSize += size;
emit sigSendHashInfo(fullSize,Tools::convertFileSize(currentSize,false));
}
quint64 FastHashCalculator::getDirectorySize(const QString& path)
{
quint64 totalSize = 0;
QDirIterator iterator(path, QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);
while (iterator.hasNext())
{
iterator.next();
QFileInfo fileInfo = iterator.fileInfo();
if (fileInfo.isFile())
{
totalSize += fileInfo.size();
}
}
return totalSize;
}
QList<FileData> *FastHashCalculator::getHashList() const
{
return hashList;
}

38
Core/fasthashcalculator.h Normal file
View File

@@ -0,0 +1,38 @@
#ifndef FASTHASHCALCULATOR_H
#define FASTHASHCALCULATOR_H
#include <QHash>
#include <QMutex>
#include <QObject>
#include <QFile>
#include <QDirIterator>
#include <Data/FileData.h>
#include "tools.h"
class FastHashCalculator : public QObject
{
Q_OBJECT
public:
explicit FastHashCalculator(QObject *parent = nullptr);
void calculateHashes(const QString& path, const QString& ignoreName);
QList<FileData> *getHashList() const;
signals:
void sigSendHashInfo(QString fullSize,QString current);
void finished();
private:
QByteArray calculateFileHashOptimized(const QString &filePath);
void calculateSingleHash(const QString &filePath);
QList<FileData>* hashList;
QMutex _mutex;
QString fullSize;
quint64 currentSize;
quint64 getDirectorySize(const QString &path);
void hashCounterDisplay(quint64 size);
};
#endif // FASTHASHCALCULATOR_H

View File

@@ -25,6 +25,7 @@ void HashComparer::CompareDeltas(QList<FileData> *serverStreamingHash, QList<Fil
{ {
if(!serverStreamingHash->contains(item)) if(!serverStreamingHash->contains(item))
{ {
if (item.path.contains("docs.xml")) continue; //фильтр на docs
files->append(item); files->append(item);
} }
} }

View File

@@ -19,14 +19,29 @@ void PostProcessorSystem::initialize(DataParserOutput *dataParserOutput,
} }
void PostProcessorSystem::userArchived()
{
emit sigShowError(ErrorsEnum::ARCHIVED);
}
void PostProcessorSystem::wrongLoginOrPass()
{
emit sigShowError(ErrorsEnum::LOGIN_OR_PASS);
}
void PostProcessorSystem::alreadyLogin()
{
emit sigShowError(ErrorsEnum::ALREADYLOGIN);
}
void PostProcessorSystem::socketDisable() void PostProcessorSystem::socketDisable()
{ {
emit sigSocketDisabled(); emit sigShowError(ErrorsEnum::DISABLE);
} }
void PostProcessorSystem::serverBlocked() void PostProcessorSystem::serverBlocked()
{ {
emit sigServerBlocked(); emit sigShowError(ErrorsEnum::BLOCKED);
} }
void PostProcessorSystem::startCompare() void PostProcessorSystem::startCompare()

View File

@@ -5,6 +5,7 @@
#include "UpdateController.h" #include "UpdateController.h"
#include <QObject> #include <QObject>
#include <Data/Datas.h> #include <Data/Datas.h>
#include <Data/ErrorsEnum.h>
class PostProcessorSystem : public QObject class PostProcessorSystem : public QObject
{ {
@@ -24,9 +25,11 @@ public:
void saveLoginData(ServerAuthorization *auth); void saveLoginData(ServerAuthorization *auth);
void setServerVersion(StreamingVersionData *serverVersion); void setServerVersion(StreamingVersionData *serverVersion);
void calculateCommonHash(); void calculateCommonHash();
void userArchived();
void wrongLoginOrPass();
void alreadyLogin();
signals: signals:
void sigSocketDisabled(); void sigShowError(ErrorsEnum error);
void sigServerBlocked();
void sigStartCompare(QList<FileData> *serverStreamingHash, QList<FileData> localStreamingHash); void sigStartCompare(QList<FileData> *serverStreamingHash, QList<FileData> localStreamingHash);
void sigCallUpdateList(); void sigCallUpdateList();
void sigSaveLoginData(ServerAuthorization *serverAuth); void sigSaveLoginData(ServerAuthorization *serverAuth);

View File

@@ -14,11 +14,12 @@ RecognizeSystem::RecognizeSystem(QObject *parent):
countSend = 0; countSend = 0;
} }
void RecognizeSystem::initialize(DataParser *dataParser, VersionContainer *versionContainer,PostProcessorSystem *postProcessorSystem) void RecognizeSystem::initialize(DataParser *dataParser, VersionContainer *versionContainer,PostProcessorSystem *postProcessorSystem,Client *client)
{ {
this->versionContainer = versionContainer; this->versionContainer = versionContainer;
this->postProcessorSystem = postProcessorSystem; this->postProcessorSystem = postProcessorSystem;
this->dataParser = dataParser; this->dataParser = dataParser;
this->client = client;
} }
void RecognizeSystem::recognize(QTcpSocket *socket) void RecognizeSystem::recognize(QTcpSocket *socket)
@@ -38,7 +39,8 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
stream.startTransaction(); stream.startTransaction();
stream >> packetType; stream >> packetType;
if(!stream.commitTransaction()){ if(!stream.commitTransaction())
{
emit sigSendDebugLog(Tools::getTime() + " CLIENT: packetType - FAIL commitTransaction"); emit sigSendDebugLog(Tools::getTime() + " CLIENT: packetType - FAIL commitTransaction");
if(socket->waitForReadyRead(TCP_READ_TIMEOUT)){ if(socket->waitForReadyRead(TCP_READ_TIMEOUT)){
@@ -205,15 +207,8 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
} }
if (packetType ==PacketType::TYPE_FINISH) //для повторного создания хэша после загрузки if(packetType == PacketType::TYPE_NEEDUPDATE)
{ { //нужно обновление
postProcessorSystem->calculateCommonHash();
emit sigLoadComplete();
packetType = PacketType::TYPE_NONE;
}
if(packetType == PacketType::TYPE_NEEDUPDATE){ //нужно обновление
bool flag = false; bool flag = false;
quint64 size = 0; quint64 size = 0;
@@ -251,10 +246,9 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
if(packetType == PacketType::HASH_READY) if(packetType == PacketType::HASH_READY)
{ {
emit sigCheckUpdate(); emit sigCheckUpdate();
//mainWindow->checkUpdate();
} }
if(packetType == PacketType::HASH_CALCULATE_START) if(packetType == PacketType::RECALCULATE_HASH)
{ {
emit sigdRecalculateHashOnServerState(); emit sigdRecalculateHashOnServerState();
} }
@@ -269,6 +263,22 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
emit sigAnimationActivated(false); emit sigAnimationActivated(false);
} }
if (packetType == PacketType::TYPE_XMLANSWER_DOCS_CHANGED) //на случай общего обновления
{
if (client->getIsLoggedIn())
{
emit sigSendPacketType(PacketType::GET_DOCS);
}
}
if (packetType == PacketType::UPDATE_FILE_COMPLETE)
{
postProcessorSystem->calculateCommonHash();
emit sigLoadComplete();
emit sigSendPacketType(PacketType::GET_DOCS);
packetType = PacketType::TYPE_NONE;
}
packetType = PacketType::TYPE_NONE; packetType = PacketType::TYPE_NONE;
} }
} }

View File

@@ -10,6 +10,7 @@
#include <QThread> #include <QThread>
#include <Core\tools.h> #include <Core\tools.h>
#include <Core\versioncontainer.h> #include <Core\versioncontainer.h>
#include <Data/Client.h>
#include <Data\streamingversiondata.h> #include <Data\streamingversiondata.h>
#include <Core\hashcomparer.h> #include <Core\hashcomparer.h>
@@ -20,7 +21,7 @@ class RecognizeSystem : public QObject
public: public:
explicit RecognizeSystem(QObject *parent = 0); explicit RecognizeSystem(QObject *parent = 0);
~RecognizeSystem(){}; ~RecognizeSystem(){};
void initialize(DataParser *dataParser, VersionContainer* versionContainer,PostProcessorSystem *postProcessorSystem); void initialize(DataParser *dataParser, VersionContainer* versionContainer,PostProcessorSystem *postProcessorSystem,Client *client);
void recognize(QTcpSocket *socket); void recognize(QTcpSocket *socket);
signals: signals:
void sigUpdateBytesAvailable(); void sigUpdateBytesAvailable();
@@ -30,6 +31,10 @@ signals:
void sigAnimationActivated(bool flag); void sigAnimationActivated(bool flag);
void sigCheckUpdate(); void sigCheckUpdate();
void sigdRecalculateHashOnServerState(); void sigdRecalculateHashOnServerState();
void sigSendPacketType(PacketType packetType);
void sigSendPacketTypeWithDelay(PacketType packetType,int delay);
void sigSendToInlineLog(QString message);
void sigCallUpdateList();
private: private:
VersionContainer *versionContainer; VersionContainer *versionContainer;
@@ -38,6 +43,7 @@ private:
PacketType packetType; PacketType packetType;
QString filePath; QString filePath;
QByteArray tmpBlock; QByteArray tmpBlock;
Client *client;
qint64 sizeReceiveData; qint64 sizeReceiveData;
qint64 fileSize; qint64 fileSize;

View File

@@ -157,16 +157,6 @@ void SendSystem::sendXMLAnswer(const QByteArray& array)
qDebug() << "Send XML answer in byte"; 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::sendPacketType(PacketType packetType) void SendSystem::sendPacketType(PacketType packetType)
{ {
QDataStream stream(socket); QDataStream stream(socket);
@@ -175,12 +165,47 @@ void SendSystem::sendPacketType(PacketType packetType)
stream << packetType; stream << packetType;
} }
void SendSystem::sendPacketTypeWithDelay(PacketType packetType,int delay)
{
QDataStream stream(socket);
stream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
socket->waitForReadyRead(delay);
stream << packetType;
}
void SendSystem::sendCheckHash() void SendSystem::sendCheckHash()
{ {
QDataStream stream(socket); QDataStream stream(socket);
stream.setVersion(QDataStream::Qt_DefaultCompiledVersion); stream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
QString fullPath = Tools::createSendFullPath(staticDataFolderName + hashFilename);
sendFileBlock(staticDataFolderName + hashFilename); quint64 fileSize = 0;
int countSend = 0;
QFile file(fullPath); //Открываем файл для чтения
QFileInfo fileInfo(file);
fileSize = fileInfo.size();
stream << PacketType::SEND_HASH; //Отправляем тип блока
stream << fileSize;
socket->waitForReadyRead(20);
//socket->waitForBytesWritten();
if(file.open(QFile::ReadOnly)){
while(!file.atEnd()){
QByteArray data = file.read(readSize);
stream << data;
socket->waitForBytesWritten(20);
countSend++;
}
qDebug() << Tools::getTime() << "count end Final: " << countSend;
}
file.close();
countSend = 0;
socket->waitForReadyRead(2000); socket->waitForReadyRead(2000);
stream << PacketType::TYPE_CHECK_VERSION; stream << PacketType::TYPE_CHECK_VERSION;

View File

@@ -25,6 +25,7 @@ public:
void sendCheckHash(); void sendCheckHash();
void sendPacketType(PacketType packetType); void sendPacketType(PacketType packetType);
~SendSystem(){}; ~SendSystem(){};
void sendPacketTypeWithDelay(PacketType packetType, int delay);
signals: signals:
void sigSend(); void sigSend();
QByteArray sigGetXmlAnswer(QString); QByteArray sigGetXmlAnswer(QString);

View File

@@ -17,7 +17,7 @@ void TCPClient::initialize(RecognizeSystem *recognize,SendSystem *sendSystem)
emit sigSendDebugLog(Tools::getTime() + " Client started"); emit sigSendDebugLog(Tools::getTime() + " Client started");
} }
void TCPClient::setConnect(ServerSettings *serverSettings) void TCPClient::setConnect(Settings *serverSettings)
{ {
socket = new QTcpSocket(); socket = new QTcpSocket();
qDebug() << "TCPCLient thread: " << thread(); qDebug() << "TCPCLient thread: " << thread();
@@ -47,7 +47,6 @@ void TCPClient::setConnect(ServerSettings *serverSettings)
} }
} }
void TCPClient::setDisconnect() void TCPClient::setDisconnect()
{ {
socket->disconnect(); socket->disconnect();

View File

@@ -21,9 +21,9 @@ class TCPClient : public QObject
public: public:
explicit TCPClient(QObject *parent = 0); explicit TCPClient(QObject *parent = 0);
void initialize(RecognizeSystem *recognize,SendSystem *sendSystem); void initialize(RecognizeSystem *recognize,SendSystem *sendSystem);
void setConnect(ServerSettings *serverSettings); void setConnect(Settings *serverSettings);
~TCPClient(){}; ~TCPClient(){};
void setDisconnect();
bool getIsConnected() const; bool getIsConnected() const;
signals: signals:
@@ -43,8 +43,6 @@ private:
QTcpSocket *socket; QTcpSocket *socket;
RecognizeSystem *recognizeSystem; RecognizeSystem *recognizeSystem;
bool isConnected; bool isConnected;
void setDisconnect();
}; };
#endif // TCPCLIENT_H #endif // TCPCLIENT_H

View File

@@ -12,12 +12,12 @@ QString Tools::getTime()
QString Tools::createLocalPath(QString path) QString Tools::createLocalPath(QString path)
{ {
qDebug() << "Full path: " << path; //qDebug() << "Full path: " << path;
qint8 pos = path.indexOf("Application"); qint8 pos = path.indexOf("Application");
QString localPath = path.remove(0,--pos); QString localPath = path.remove(0,--pos);
qDebug() << "Local path: " << localPath; //qDebug() << "Local path: " << localPath;
return localPath; return localPath;
} }

View File

@@ -39,13 +39,16 @@ enum PacketType{
TYPE_COMMAND = 3, TYPE_COMMAND = 3,
TYPE_FOLDER = 4, TYPE_FOLDER = 4,
TYPE_DELETE = 5, TYPE_DELETE = 5,
TYPE_FINISH = 6, UPDATE_FILE_COMPLETE = 6,
TYPE_NEEDUPDATE = 7, TYPE_NEEDUPDATE = 7,
TYPE_XMLANSWER = 8, TYPE_XMLANSWER = 8,
TYPE_QT = 9, TYPE_QT = 9,
TYPE_DISABLE = 11, TYPE_DISABLE = 11,
TYPE_UPDATE = 12, TYPE_UPDATE = 12,
TYPE_CHECK_VERSION = 13, TYPE_CHECK_VERSION = 13,
UPDATE_DOCS_COMPLETE = 22,
TYPE_XMLANSWER_DOCS_CHANGED = 132,
HASH_READY = 150, HASH_READY = 150,
CHANGE_DATA_VERSION = 151, CHANGE_DATA_VERSION = 151,
@@ -53,7 +56,10 @@ enum PacketType{
DELETE_DATA_VERSION = 153, DELETE_DATA_VERSION = 153,
BUSY = 154, BUSY = 154,
FREE = 155, FREE = 155,
HASH_CALCULATE_START = 156 RECALCULATE_HASH = 156,
RECALCULATE_DOCS = 157,
GET_DOCS = 158,
SEND_HASH = 159
}; };

105
Data/Client.h Normal file
View File

@@ -0,0 +1,105 @@
#ifndef CLIENT_H
#define CLIENT_H
#include <QString>
#include <QTcpSocket>
class Client
{
public:
Client():
login(""),
ready(false)
{ };
~Client(){};
public:
QString getFullName()
{
return fullName;
};
void setLogin(QString login)
{
this->login = login;
isLoggedIn = true;
fullName = "Name: " + name + " IP: " + address + " port : " + port + " login: " + login;
}
QString getLogin()
{
return login;
}
QString getAddress()
{
return address;
}
QString getPort()
{
return port;
}
bool getReady()
{
return ready;
}
void setReady(bool ready)
{
this->ready = ready;
}
bool operator == (Client* right)
{
return this->address == right->address;
}
bool getIsLoggedIn()
{
return isLoggedIn;
}
void setIsLoggedIn(bool value)
{
isLoggedIn = value;
}
QString getId()
{
return id;
}
void setId(QString value)
{
id = value;
}
QByteArray getClientHash()
{
return clientHash;
}
void setClientHash(const QByteArray &value)
{
clientHash = value;
}
private:
QString name;
QString address;
QString port;
QString fullName;
QString id;
QString login;
bool ready;
bool isLoggedIn;
QByteArray clientHash;
};
#endif // CLIENT_H

View File

@@ -5,14 +5,14 @@
#include <QString> #include <QString>
class ServerSettings{ class Settings{
public: public:
QString Address; QString Address;
QString Port; QString Port;
QString Language; QString Language;
QString LocalVersionName; QString LocalVersionName;
StreamingVersionData versionData; StreamingVersionData versionData;
bool isAutoStart; bool isAutoStart = false;
bool mathModelUse; bool mathModelUse;
}; };

13
Data/ErrorsEnum.h Normal file
View File

@@ -0,0 +1,13 @@
#ifndef ERRORSENUM_H
#define ERRORSENUM_H
enum ErrorsEnum
{
BLOCKED,
ARCHIVED,
LOGIN_OR_PASS,
ALREADYLOGIN,
DISABLE
};
#endif // ERRORSENUM_H

View File

@@ -1,11 +1,10 @@
QT += core gui QT += core gui
QT += network QT += network
QT += xml QT += xml
QT += concurrent
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11 CONFIG += c++11
# The following define makes your compiler emit warnings if you use # The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings # any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the # depend on your compiler). Please consult the documentation of the
@@ -19,6 +18,7 @@ DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += \ SOURCES += \
Core/dataparseroutput.cpp \ Core/dataparseroutput.cpp \
Core/fasthashcalculator.cpp \
Core/notifycontroller.cpp \ Core/notifycontroller.cpp \
Core/postprocessorsystem.cpp \ Core/postprocessorsystem.cpp \
Core/sendsystem.cpp \ Core/sendsystem.cpp \
@@ -46,6 +46,7 @@ SOURCES += \
HEADERS += \ HEADERS += \
Core/dataparseroutput.h \ Core/dataparseroutput.h \
Core/fasthashcalculator.h \
Core/notifycontroller.h \ Core/notifycontroller.h \
Core/postprocessorsystem.h \ Core/postprocessorsystem.h \
Core/versioncontainer.h \ Core/versioncontainer.h \
@@ -58,6 +59,8 @@ HEADERS += \
Core\tcpclient.h\ Core\tcpclient.h\
Core\tools.h\ Core\tools.h\
Core\hashcomparer.h \ Core\hashcomparer.h \
Data/Client.h \
Data/ErrorsEnum.h \
Data/monitorInfo.h \ Data/monitorInfo.h \
Data/streamingversiondata.h \ Data/streamingversiondata.h \
Data\FileData.h\ Data\FileData.h\
@@ -85,11 +88,15 @@ FORMS += \
TRANSLATIONS = QtLanguage_ru.ts\ TRANSLATIONS = QtLanguage_ru.ts\
QtLanguage_eng.ts QtLanguage_eng.ts
#TEMPLATE = subdirs
#SUBDIRS += Unit-tests\
# Default rules for deployment. # Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target !isEmpty(target.path): INSTALLS += target
TARGET = ClientMPS
RESOURCES += \ RESOURCES += \
resources.qrc resources.qrc

9980
StaticData/clientHash.xml Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,2 @@
<DisplayInfo DisplaysID="0;"/>

9960
StaticData/serverHash.xml Normal file

File diff suppressed because it is too large Load Diff

5
StaticData/settings.xml Normal file
View File

@@ -0,0 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<ServerSettingsContainer>
<ServerSettings AutoStart="0" Port="6000" Address="192.168.100.134" Language="RUS"/>
<VersionData Created="Пн дек 22 15:46:11 2025" isChangable="1" Version="max2"/>
</ServerSettingsContainer>

9774
StaticData/streamingHash.xml Normal file

File diff suppressed because it is too large Load Diff

2
StaticData/temp.xml Normal file
View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<ClientNotify Code="DISABLE"/>

View File

@@ -26,7 +26,7 @@ void CommonButtonGroupWidget::updateProgressBar(float value)
void CommonButtonGroupWidget::loadCompleteState() void CommonButtonGroupWidget::loadCompleteState()
{ {
show(); show();
ui->updateButton->setEnabled(false); ui->updateButton->hide();
ui->startButton->setEnabled(true); ui->startButton->setEnabled(true);
ui->loadingProgressBar->setValue(100); ui->loadingProgressBar->setValue(100);
ui->startButton->show(); ui->startButton->show();
@@ -66,6 +66,8 @@ void CommonButtonGroupWidget::showProgressBar(bool flag)
void CommonButtonGroupWidget::needUpdateState(bool flag) void CommonButtonGroupWidget::needUpdateState(bool flag)
{ {
show();
ui->loadingProgressBar->hide();
ui->startButton->hide(); ui->startButton->hide();
ui->updateButton->setEnabled(flag); ui->updateButton->setEnabled(flag);
ui->updateButton->show(); ui->updateButton->show();

View File

@@ -1,6 +1,10 @@
#include "entrywidget.h" #include "entrywidget.h"
#include "ui_entrywidget.h" #include "ui_entrywidget.h"
#include <bits/functional_hash.h>
#include <QCryptographicHash>
EntryWidget::EntryWidget(QWidget *parent) : EntryWidget::EntryWidget(QWidget *parent) :
QWidget(parent), QWidget(parent),
ui(new Ui::EntryWidget) ui(new Ui::EntryWidget)
@@ -34,7 +38,9 @@ ClientAutorization* EntryWidget::getAuthData()
QString username = ui->loginInputField->text(); QString username = ui->loginInputField->text();
QString password = ui->passwordInputField->text(); QString password = ui->passwordInputField->text();
data->Login = username; data->Login = username;
data->Password = password;
QByteArray md5Hash = QCryptographicHash::hash(password.toUtf8(), QCryptographicHash::Md5).toHex();
data->Password = QString(md5Hash);
return data; return data;
} }
@@ -59,21 +65,7 @@ void EntryWidget::on_saveServerButton_clicked()
emit sigSaveServerSettings(); emit sigSaveServerSettings();
} }
ServerSettings *EntryWidget::getServerSettings() void EntryWidget::fillSettings(Settings *settings)
{
ServerSettings *data = new ServerSettings;
QString server = ui->serverInputField->text();
QString port = ui->portInputField->text();
//bool checked = ui->mathModelUsecheckBox->isChecked();
data->Address = server;
data->Port = port;
data->mathModelUse = true;
return data;
}
void EntryWidget::fillSettings(ServerSettings *settings)
{ {
ui->serverInputField->setText(settings->Address); ui->serverInputField->setText(settings->Address);
ui->portInputField->setText(settings->Port); ui->portInputField->setText(settings->Port);
@@ -91,6 +83,14 @@ bool EntryWidget::getLoginWidgetIsHidden()
return ui->loginWidget->isHidden(); return ui->loginWidget->isHidden();
} }
QString EntryWidget::getAddress(){
return ui->serverInputField->text();
}
QString EntryWidget::getPort(){
return ui->portInputField->text();
}
EntryWidget::~EntryWidget() EntryWidget::~EntryWidget()
{ {

View File

@@ -20,13 +20,13 @@ public:
void showLoginWidget(bool flag); void showLoginWidget(bool flag);
void disconnectState(); void disconnectState();
void fillSettings(ServerSettings *settings); void fillSettings(Settings *settings);
void isActive(bool flag); void isActive(bool flag);
bool getLoginWidgetIsHidden(); bool getLoginWidgetIsHidden();
ServerSettings *getServerSettings();
ClientAutorization* getAuthData(); ClientAutorization* getAuthData();
QString getAddress();
QString getPort();
signals: signals:
void sigTryLogin(); void sigTryLogin();
void sigSaveServerSettings(); void sigSaveServerSettings();

View File

@@ -3,6 +3,7 @@
#include "Core/tools.h" #include "Core/tools.h"
#include <QMessageBox> #include <QMessageBox>
#include <QTextDocumentFragment>
UpdateNotifyWidget::UpdateNotifyWidget(QWidget *) : UpdateNotifyWidget::UpdateNotifyWidget(QWidget *) :
ui(new Ui::UpdateNotifyWidget) ui(new Ui::UpdateNotifyWidget)
@@ -37,15 +38,18 @@ void UpdateNotifyWidget::addToList(FileData fileData)
void UpdateNotifyWidget::showTryChangeBase() void UpdateNotifyWidget::showTryChangeBase()
{ {
QString path = QDir::currentPath() + streamingAssetsPath; QString path = QDir::currentPath() + streamingAssetsPath;
QString link = "<a href=\""+ path + "\"style=\"color:white;\">папку</a>"; QString link = "<a href=\""+ path + "\"style=\"color:lightblue; text-decoration: underline;\">папку</a>";
ui->labelsLayout->addWidget(createLabel(tr("Данные изменения нельзя выгрузить на сервер, так как версия сервера не изменяема \n"))); ui->labelsLayout->addWidget(createLabel(tr("Данные изменения нельзя выгрузить на сервер, так как версия сервера не изменяема \n")));
ui->labelsLayout->addWidget(createLabel(tr("Чтобы выгрузить на сервер нужно:"))); ui->labelsLayout->addWidget(createLabel(tr("Чтобы выгрузить на сервер нужно:")));
ui->labelsLayout->addWidget(createLabel(tr("1. Скопировать измененные или созданные файлы в временную папку"))); ui->labelsLayout->addWidget(createLabel(tr("1. Скопировать измененные или созданные файлы в временную папку")));
QLabel *labelStorage = new QLabel; QLabel *labelStorage = new QLabel;
QString link2 = "<a href=\""+ path + "\"style=\"color:white;\">тут</a>"; QString link2 = "<a href=\""+ path + "\"style=\"color:lightblue; text-decoration: underline;\">тут</a>";
labelStorage->setText(tr("Файлы можно найти в ") + link2 ); labelStorage->setText(tr("Файлы можно найти в ") + link2);
labelStorage->setTextFormat(Qt::RichText);
labelStorage->setTextInteractionFlags(Qt::TextBrowserInteraction);
labelStorage->setOpenExternalLinks(true); labelStorage->setOpenExternalLinks(true);
ui->labelsLayout->addWidget(labelStorage); ui->labelsLayout->addWidget(labelStorage);
ui->labelsLayout->addWidget(createLabel(tr("2. Нажать Отменить изменения и дождатся окончания операции"))); ui->labelsLayout->addWidget(createLabel(tr("2. Нажать Отменить изменения и дождатся окончания операции")));
ui->labelsLayout->addWidget(createLabel(tr("3. Изменить версию сервера на изменяемую"))); ui->labelsLayout->addWidget(createLabel(tr("3. Изменить версию сервера на изменяемую")));
@@ -55,6 +59,8 @@ void UpdateNotifyWidget::showTryChangeBase()
QLabel *linkLabel = new QLabel; QLabel *linkLabel = new QLabel;
linkLabel->setText(tr("5. Скопировать файлы из временной папки в эту ") + link); linkLabel->setText(tr("5. Скопировать файлы из временной папки в эту ") + link);
linkLabel->setOpenExternalLinks(true); linkLabel->setOpenExternalLinks(true);
linkLabel->setTextFormat(Qt::RichText);
linkLabel->setTextInteractionFlags(Qt::TextBrowserInteraction);
ui->labelsLayout->addWidget(linkLabel); ui->labelsLayout->addWidget(linkLabel);
ui->labelsLayout->addWidget(createLabel(tr("6.Перезапустить клиент и выгрузить изменения на сервер"))); ui->labelsLayout->addWidget(createLabel(tr("6.Перезапустить клиент и выгрузить изменения на сервер")));
@@ -66,11 +72,7 @@ void UpdateNotifyWidget::showWithFill()
{ {
clearList(); clearList();
if(!versionContainer->getLocalVersionData()->getIsChangeable()) if(!versionContainer->getServerVersionData()->getIsChangeable())
{
showTryChangeBase();
}
else if(!versionContainer->getServerVersionData()->getIsChangeable())
{ {
showTryChangeBase(); showTryChangeBase();
} }
@@ -117,6 +119,11 @@ void UpdateNotifyWidget::on_startWithCurrentChangesButton_clicked()
emit sigStartUnityClient(); emit sigStartUnityClient();
} }
void UpdateNotifyWidget::closeWindow()
{
on_closeButton_clicked();
}
void UpdateNotifyWidget::setUpdateState() void UpdateNotifyWidget::setUpdateState()
{ {
ui->undoChangesButton->show(); ui->undoChangesButton->show();

View File

@@ -25,6 +25,7 @@ public:
void showWithFill(); void showWithFill();
void showTryChangeBase(); void showTryChangeBase();
void setVersionContainer(VersionContainer *versionContainer); void setVersionContainer(VersionContainer *versionContainer);
void closeWindow();
signals: signals:
void sigLoadToServerBehaviour(); void sigLoadToServerBehaviour();
void sigUndoCurrentChanges(); void sigUndoCurrentChanges();

View File

@@ -11,6 +11,7 @@ Bootstrap::Bootstrap(QObject *parent) : QObject(parent)
void Bootstrap::initialize() void Bootstrap::initialize()
{ {
qRegisterMetaType<PacketType>("PacketType"); qRegisterMetaType<PacketType>("PacketType");
qRegisterMetaType<ErrorsEnum>("ErrorsEnum");
widgetManager->initialize(); widgetManager->initialize();
coreManager->initialize(widgetManager, workerThread); coreManager->initialize(widgetManager, workerThread);

View File

@@ -4,7 +4,7 @@ CoreManager::CoreManager(QObject *parent) :
QObject(parent), QObject(parent),
isRecovery(false) isRecovery(false)
{ {
client = new TCPClient; tcpClient = new TCPClient;
dataParser = new DataParser; dataParser = new DataParser;
dataParserOutput = new DataParserOutput; dataParserOutput = new DataParserOutput;
updateController = new UpdateController; updateController = new UpdateController;
@@ -16,14 +16,18 @@ CoreManager::CoreManager(QObject *parent) :
versionContainer = new VersionContainer; versionContainer = new VersionContainer;
resourceManager = new ResourceManager; resourceManager = new ResourceManager;
postProcessorSystem = new PostProcessorSystem; postProcessorSystem = new PostProcessorSystem;
client = new Client;
settings = new Settings;
} }
void CoreManager::initialize(WidgetManager *widgetManager,QThread *workerThread) void CoreManager::initialize(WidgetManager *widgetManager,QThread *workerThread)
{ {
createNewServerSettings();
this->workerThread = workerThread; this->workerThread = workerThread;
this->widgetManager = widgetManager; this->widgetManager = widgetManager;
client->moveToThread(workerThread); tcpClient->moveToThread(workerThread);
dataParser->moveToThread(workerThread); dataParser->moveToThread(workerThread);
dataParserOutput->moveToThread(workerThread); dataParserOutput->moveToThread(workerThread);
sendSystem->moveToThread(workerThread); sendSystem->moveToThread(workerThread);
@@ -31,11 +35,8 @@ void CoreManager::initialize(WidgetManager *widgetManager,QThread *workerThread)
recognizeSystem->moveToThread(workerThread); recognizeSystem->moveToThread(workerThread);
postProcessorSystem->moveToThread(workerThread); postProcessorSystem->moveToThread(workerThread);
hashComparer->moveToThread(workerThread); hashComparer->moveToThread(workerThread);
// versionContainer->moveToThread(workerThread); //проверить работоспособность
// resourceManager->moveToThread(workerThread); //проверить работоспособность
workerThread->start(); workerThread->start();
//workerThread->setPriority(QThread::HighestPriority);
binding(); binding();
initializeSystems(); initializeSystems();
@@ -51,35 +52,36 @@ void CoreManager::start()
void CoreManager::loadStaticData() void CoreManager::loadStaticData()
{ {
ServerSettings *currentSettings = dataParser->getClientSettings(); settings = dataParser->getSettings();
setLanguage(currentSettings->Language); setLanguage(settings->Language);
setLocalVersion(); setLocalVersion();
externalExecuter->setIsAutoStart(currentSettings->isAutoStart); externalExecuter->setIsAutoStart(settings->isAutoStart);
bool appAvailable = externalExecuter->findApp(); bool appAvailable = externalExecuter->findApp();
widgetManager->setAppAvailable(appAvailable); widgetManager->setAppAvailable(appAvailable);
emit sigSetLoadSettings(currentSettings); emit sigSetLoadSettings(settings);
} }
void CoreManager::binding() void CoreManager::binding()
{ {
connect(recognizeSystem,&RecognizeSystem::sigAnimationActivated,widgetManager,&WidgetManager::slotActivateLoadAnimation,Qt::AutoConnection); connect(recognizeSystem,&RecognizeSystem::sigAnimationActivated,widgetManager,&WidgetManager::slotActivateLoadAnimation,Qt::AutoConnection);
connect(this,&CoreManager::sigInitializeClient,client,&TCPClient::initialize,Qt::AutoConnection); connect(this,&CoreManager::sigInitializeClient,tcpClient,&TCPClient::initialize,Qt::AutoConnection);
connect(this,&CoreManager::sigSetConnect,client,&TCPClient::setConnect,Qt::AutoConnection); connect(this,&CoreManager::sigSetConnect,tcpClient,&TCPClient::setConnect,Qt::AutoConnection);
connect(this,&CoreManager::sigSendCommand,sendSystem,&SendSystem::sendPacketType,Qt::AutoConnection); connect(this,&CoreManager::sigSendPacketType,sendSystem,&SendSystem::sendPacketType,Qt::AutoConnection);
connect(this,&CoreManager::sigSendCheckUpdate,sendSystem,&SendSystem::sendCheckHash,Qt::AutoConnection); connect(this,&CoreManager::sigSendCheckUpdate,sendSystem,&SendSystem::sendCheckHash,Qt::AutoConnection);
connect(this,&CoreManager::sigSendXMLAnswer,sendSystem,&SendSystem::xmlAnswer,Qt::AutoConnection); connect(this,&CoreManager::sigSendXMLAnswer,sendSystem,&SendSystem::xmlAnswer,Qt::AutoConnection);
connect(this,&CoreManager::sigSendAutorization,sendSystem,&SendSystem::sendClientAutorization); connect(this,&CoreManager::sigSendAutorization,sendSystem,&SendSystem::sendClientAutorization,Qt::AutoConnection);
connect(this,&CoreManager::sigGetClientSettings,dataParser,&DataParser::getSettings,Qt::DirectConnection);
connect(this,&CoreManager::sigSendUpdateToServer,updateController,&UpdateController::checkCanUpdate,Qt::AutoConnection); connect(this,&CoreManager::sigSendUpdateToServer,updateController,&UpdateController::checkCanUpdate,Qt::AutoConnection);
connect(this,&CoreManager::sigGetConnected,client,&TCPClient::getIsConnected); connect(this,&CoreManager::sigGetConnected,tcpClient,&TCPClient::getIsConnected);
connect(this,&CoreManager::sigCalculateHash,updateController,&UpdateController::calculateCommonHash); connect(this,&CoreManager::sigCalculateHash,updateController,&UpdateController::calculateCommonHash);
connect(this,&CoreManager::sigSetLoadSettings,widgetManager,&WidgetManager::slotSetLoadSettings,Qt::AutoConnection); connect(this,&CoreManager::sigSetLoadSettings,widgetManager,&WidgetManager::slotSetLoadSettings,Qt::AutoConnection);
connect(postProcessorSystem,&PostProcessorSystem::sigCallUpdateList,this,&CoreManager::callUpdateList,Qt::AutoConnection); connect(postProcessorSystem,&PostProcessorSystem::sigCallUpdateList,this,&CoreManager::callUpdateList,Qt::AutoConnection);
connect(postProcessorSystem,&PostProcessorSystem::sigSocketDisabled,this,&CoreManager::lostConnection,Qt::AutoConnection); connect(postProcessorSystem,&PostProcessorSystem::sigShowError,this,&CoreManager::showError,Qt::AutoConnection);
connect(postProcessorSystem,&PostProcessorSystem::sigServerBlocked,this,&CoreManager::serverBlocked,Qt::AutoConnection); connect(postProcessorSystem,&PostProcessorSystem::sigStartCompare,hashComparer,&HashComparer::CompareDeltas,Qt::AutoConnection);
connect(postProcessorSystem,&PostProcessorSystem::sigStartCompare,hashComparer,&HashComparer::CompareDeltas,Qt::AutoConnection); // ОПАСНОСТЬ
connect(postProcessorSystem,&PostProcessorSystem::sigSaveLoginData,this,&CoreManager::checkLoginResult,Qt::AutoConnection); connect(postProcessorSystem,&PostProcessorSystem::sigSaveLoginData,this,&CoreManager::checkLoginResult,Qt::AutoConnection);
connect(versionContainer,&VersionContainer::sigSetServerVersion,this,&CoreManager::setServerVersion,Qt::AutoConnection); connect(versionContainer,&VersionContainer::sigSetServerVersion,this,&CoreManager::setServerVersion,Qt::AutoConnection);
@@ -89,19 +91,24 @@ void CoreManager::binding()
connect(recognizeSystem,&RecognizeSystem::sigNeedUpdate,this,&CoreManager::checkNeedUpdate,Qt::AutoConnection); connect(recognizeSystem,&RecognizeSystem::sigNeedUpdate,this,&CoreManager::checkNeedUpdate,Qt::AutoConnection);
connect(recognizeSystem,&RecognizeSystem::sigCheckUpdate,this,&CoreManager::checkUpdate,Qt::AutoConnection); connect(recognizeSystem,&RecognizeSystem::sigCheckUpdate,this,&CoreManager::checkUpdate,Qt::AutoConnection);
connect(recognizeSystem,&RecognizeSystem::sigdRecalculateHashOnServerState,this,&CoreManager::recalculateState,Qt::AutoConnection); connect(recognizeSystem,&RecognizeSystem::sigdRecalculateHashOnServerState,this,&CoreManager::recalculateState,Qt::AutoConnection);
connect(recognizeSystem,&RecognizeSystem::sigSendPacketType,this,&CoreManager::sendPacketType,Qt::AutoConnection);
connect(recognizeSystem,&RecognizeSystem::sigSendPacketTypeWithDelay,sendSystem,&SendSystem::sendPacketTypeWithDelay,Qt::AutoConnection);
connect(recognizeSystem,&RecognizeSystem::sigSendToInlineLog,this,&CoreManager::setInlineDebug,Qt::AutoConnection);
connect(recognizeSystem,&RecognizeSystem::sigCallUpdateList,this,&CoreManager::callUpdateList,Qt::AutoConnection);
connect(hashComparer,&HashComparer::sigCallCheck,this,&CoreManager::checkUpdate); connect(hashComparer,&HashComparer::sigCallCheck,this,&CoreManager::checkUpdate);
connect(hashComparer,&HashComparer::sigHaveDelta,this,&CoreManager::checkUpdateInfo); connect(hashComparer,&HashComparer::sigHaveDelta,this,&CoreManager::checkUpdateInfo);
connect(updateController,&UpdateController::sigUpdateComplete,widgetManager,&WidgetManager::setCompeteState,Qt::AutoConnection);//ОПАСНОСТЬ connect(updateController,&UpdateController::sigUpdateComplete,widgetManager,&WidgetManager::setCompeteState,Qt::AutoConnection);
connect(updateController,&UpdateController::sigSendHashInfo,widgetManager->getMainWindow(),&MainWindow::updateInitInformation,Qt::AutoConnection); connect(updateController->getHashCalculator(),&FastHashCalculator::sigSendHashInfo,widgetManager->getMainWindow(),&MainWindow::updateInitInformation,Qt::AutoConnection);
connect(client,&TCPClient::sigConnectionState,widgetManager,&WidgetManager::setConnectionState,Qt::AutoConnection);//ОПАСНОСТЬ connect(tcpClient,&TCPClient::sigConnectionState,widgetManager,&WidgetManager::setConnectionState,Qt::AutoConnection);
connect(client,&TCPClient::sigServerDisconnect,widgetManager,&WidgetManager::setServerDisconnectState,Qt::AutoConnection);//ОПАСНОСТЬ connect(tcpClient,&TCPClient::sigServerDisconnect,widgetManager,&WidgetManager::setServerDisconnectState,Qt::AutoConnection);
connect(sendSystem,&SendSystem::sigSend,this,&CoreManager::calcUpdateProgress,Qt::AutoConnection); connect(sendSystem,&SendSystem::sigSend,this,&CoreManager::calcUpdateProgress,Qt::AutoConnection);
connect(sendSystem,&SendSystem::sigGetXmlAnswer,dataParserOutput,&DataParserOutput::xmlAnswer_notify,Qt::DirectConnection);//ОПАСНОСТЬ connect(sendSystem,&SendSystem::sigGetXmlAnswer,dataParserOutput,&DataParserOutput::xmlAnswer_notify,Qt::DirectConnection);
} }
void CoreManager::initializeSystems() void CoreManager::initializeSystems()
@@ -111,7 +118,7 @@ void CoreManager::initializeSystems()
hashComparer->initialize(versionContainer,widgetManager->getUpdateWidget()); hashComparer->initialize(versionContainer,widgetManager->getUpdateWidget());
postProcessorSystem->initialize(dataParserOutput,hashComparer,versionContainer,updateController); postProcessorSystem->initialize(dataParserOutput,hashComparer,versionContainer,updateController);
dataParser->initialize(postProcessorSystem); dataParser->initialize(postProcessorSystem);
recognizeSystem->initialize(dataParser,versionContainer,postProcessorSystem); recognizeSystem->initialize(dataParser,versionContainer,postProcessorSystem,client);
resourceManager->painting(); resourceManager->painting();
emit sigCalculateHash(); emit sigCalculateHash();
@@ -119,7 +126,7 @@ void CoreManager::initializeSystems()
screenChecker->check(); screenChecker->check();
emit sigSetConnect(dataParser->getClientSettings()); emit sigSetConnect(dataParser->getSettings());
} }
void CoreManager::initializeWidgets() void CoreManager::initializeWidgets()
@@ -160,29 +167,37 @@ void CoreManager::callUpdateList()
emit sigSendXMLAnswer(cmd_GetServerHash); emit sigSendXMLAnswer(cmd_GetServerHash);
} }
void CoreManager::lostConnection() void CoreManager::showError(ErrorsEnum errorEnum)
{ {
widgetManager->setLostConnectionState(); widgetManager->getMainWindow()->showError(errorEnum);
if (errorEnum == ErrorsEnum::BLOCKED)
{
widgetManager->getEntryWidget()->showLoginWidget(true);
}
} }
void CoreManager::serverBlocked()
{
widgetManager->getMainWindow()->serverBlocked();
}
void CoreManager::setServerVersion(StreamingVersionData *version) void CoreManager::setServerVersion(StreamingVersionData *version)
{ {
widgetManager->getMainWindow()->setServerVersion(version); widgetManager->getMainWindow()->setServerVersion(version);
if (version->getViewName() == settings->versionData.getViewName())
{
settings->versionData.setIsChangeable(version->getIsChangeable());
versionContainer->getLocalVersionData()->setIsChangeable(version->getIsChangeable());
dataParserOutput->updateServerSettings(settings);
}
} }
void CoreManager::setLocalVersion() void CoreManager::setLocalVersion()
{ {
ServerSettings *currentSettings = dataParser->getClientSettings();
StreamingVersionData *version = new StreamingVersionData; StreamingVersionData *version = new StreamingVersionData;
version->setName(currentSettings->LocalVersionName); version->setName(settings->LocalVersionName);
version->setIsChangeable(currentSettings->versionData.getIsChangeable()); version->setIsChangeable(settings->versionData.getIsChangeable());
versionContainer->setLocalVersionData(version); versionContainer->setLocalVersionData(version);
widgetManager->getMainWindow()->setClientVersionName(versionContainer->getLocalVersion());
} }
void CoreManager::checkLoginResult(ServerAuthorization *auth) void CoreManager::checkLoginResult(ServerAuthorization *auth)
@@ -192,19 +207,22 @@ void CoreManager::checkLoginResult(ServerAuthorization *auth)
widgetManager->activateLoadingAnimation(true); widgetManager->activateLoadingAnimation(true);
checkAccessType(auth->AccessType); checkAccessType(auth->AccessType);
dataParserOutput->createAuthData(auth); dataParserOutput->createAuthData(auth);
setLocalVersion(); //setLocalVersion();
widgetManager->setLoginSuccess(); widgetManager->setLoginSuccess();
widgetManager->getMainWindow()->setClientVersionName(versionContainer->getLocalVersion()); widgetManager->getMainWindow()->setClientVersionName(versionContainer->getLocalVersion());
client->setLogin(auth->ClientName);
client->setIsLoggedIn(true);
} }
else else
{ {
widgetManager->setLoginFailed(); widgetManager->setLoginFailed();
client->setIsLoggedIn(false);
} }
} }
void CoreManager::tryLogin() void CoreManager::tryLogin()
{ {
if (!client->getIsConnected()) if (!tcpClient->getIsConnected())
{ {
widgetManager->getMainWindow()->showConnectionEmpty(); widgetManager->getMainWindow()->showConnectionEmpty();
return; return;
@@ -220,13 +238,18 @@ void CoreManager::checkUpdate()
{ {
widgetManager->activateLoadingAnimation(true); widgetManager->activateLoadingAnimation(true);
emit sigSendCheckUpdate(); emit sigSendCheckUpdate();
widgetManager->getMainWindow()->setInlineDebug(tr("Проверка обновлений...")); setInlineDebug(tr("Проверка обновлений..."));
} }
void CoreManager::recalculateState() void CoreManager::recalculateState()
{ {
widgetManager->activateLoadingAnimation(true); widgetManager->activateLoadingAnimation(true);
widgetManager->getMainWindow()->setInlineDebug(tr("Пересчет хэша на сервере...")); setInlineDebug(tr("Пересчет хэша на сервере..."));
}
void CoreManager::setInlineDebug(QString text)
{
widgetManager->getMainWindow()->setInlineDebug(text);
} }
void CoreManager::checkAccessType(const QString& accessType) void CoreManager::checkAccessType(const QString& accessType)
@@ -307,7 +330,7 @@ void CoreManager::loadComplete()
dataParserOutput->changeVersion(versionContainer->getServerVersionData()); dataParserOutput->changeVersion(versionContainer->getServerVersionData());
setLocalVersion(); setLocalVersion();
checkAutoStart(); checkAutoStart();
widgetManager->getMainWindow()->setClientVersionName(versionContainer->getLocalVersion()); widgetManager->getMainWindow()->setClientVersionName(versionContainer->getServerVersionData()->getViewName());
} }
void CoreManager::loadToServer() void CoreManager::loadToServer()
@@ -322,11 +345,9 @@ void CoreManager::undoCurrentChanges()
isRecovery = true; isRecovery = true;
widgetManager->setUndoCurrentChangesState(); widgetManager->setUndoCurrentChangesState();
emit sigSendCheckUpdate(); emit sigSendCheckUpdate();
emit sigSendCommand(PacketType::TYPE_UPDATE); //emit sigSendPacketType(PacketType::TYPE_UPDATE);
//тут был таймер //тут был таймер
isRecovery = false; isRecovery = false;
widgetManager->activateLoadingAnimation(false);
} }
void CoreManager::startOffline() void CoreManager::startOffline()
@@ -338,26 +359,37 @@ void CoreManager::startOffline()
startUnityClient(); startUnityClient();
} }
void CoreManager::sendPacketType(PacketType packetType)
{
emit sigSendPacketType(packetType);
}
void CoreManager::saveServerSettingsWithConnect() void CoreManager::saveServerSettingsWithConnect()
{ {
widgetManager->activateLoadingAnimation(true); widgetManager->activateLoadingAnimation(true);
EntryWidget *entryWidget = widgetManager->getEntryWidget(); EntryWidget *entryWidget = widgetManager->getEntryWidget();
entryWidget->isActive(false); entryWidget->isActive(false);
ServerSettings *settings = entryWidget->getServerSettings(); settings->LocalVersionName = dataParser->getSettings()->LocalVersionName;
settings->LocalVersionName = dataParser->getClientSettings()->LocalVersionName; settings->Address = entryWidget->getAddress();
dataParserOutput->createServerSettings(settings); settings->Port = entryWidget->getPort();
dataParserOutput->updateServerSettings(settings);
if(client->getIsConnected()) if(tcpClient->getIsConnected())
{ {
emit sigSendXMLAnswer(cmd_Disable);
tcpClient->setDisconnect();
entryWidget->showLoginWidget(true); entryWidget->showLoginWidget(true);
widgetManager->getMainWindow()->showOfflineButton(true); widgetManager->getMainWindow()->showOfflineButton(true);
widgetManager->activateLoadingAnimation(false); widgetManager->activateLoadingAnimation(false);
} }
else
{ emit sigSetConnect(settings);
emit sigSetConnect(settings); }
}
void CoreManager::createNewServerSettings()
{
dataParserOutput->createServerSettings();
} }
void CoreManager::checkAppAvailable() void CoreManager::checkAppAvailable()
@@ -384,7 +416,7 @@ void CoreManager::setLanguage(const QString& language)
void CoreManager::exit() void CoreManager::exit()
{ {
emit sigSendXMLAnswer(cmd_Disable); emit sigSendXMLAnswer(cmd_Disable);
client->disconnect(); tcpClient->disconnect();
workerThread->quit(); workerThread->quit();
workerThread->wait(); workerThread->wait();

View File

@@ -14,6 +14,7 @@
#include <Core/hashcomparer.h> #include <Core/hashcomparer.h>
#include <Core/versioncontainer.h> #include <Core/versioncontainer.h>
#include <widgetmanager.h> #include <widgetmanager.h>
#include <Data/Client.h>
#include <UI/resourcemanager.h> #include <UI/resourcemanager.h>
@@ -39,6 +40,7 @@ public:
void startUnityClient(); void startUnityClient();
void tryLogin(); void tryLogin();
void startOffline(); void startOffline();
void sendPacketType(PacketType packetType);
void saveServerSettingsWithConnect(); void saveServerSettingsWithConnect();
@@ -50,20 +52,22 @@ public:
void recalculateState(); void recalculateState();
signals: signals:
void sigInitializeClient(RecognizeSystem *recognize,SendSystem *sendSystem); void sigInitializeClient(RecognizeSystem *recognize,SendSystem *sendSystem);
void sigSendCommand(PacketType packetType); void sigSendPacketType(PacketType packetType);
void sigSendXMLAnswer(QString answer); void sigSendXMLAnswer(QString answer);
void sigSetConnect(ServerSettings* serverSettings); void sigSetConnect(Settings* serverSettings);
void sigCalculateHash(); void sigCalculateHash();
void sigSendAutorization(); void sigSendAutorization();
void sigSendCheckUpdate(); void sigSendCheckUpdate();
bool sigGetConnected(); bool sigGetConnected();
void sigSendUpdateToServer(); void sigSendUpdateToServer();
Settings *sigGetClientSettings();
void sigSetLoadSettings(ServerSettings *serverSettings);
void sigSetLoadSettings(Settings *serverSettings);
private: private:
QTranslator translator; QTranslator translator;
TCPClient *client; TCPClient *tcpClient;
DataParser *dataParser; DataParser *dataParser;
DataParserOutput *dataParserOutput; DataParserOutput *dataParserOutput;
UpdateController *updateController; UpdateController *updateController;
@@ -75,6 +79,8 @@ private:
VersionContainer *versionContainer; VersionContainer *versionContainer;
ResourceManager *resourceManager; ResourceManager *resourceManager;
PostProcessorSystem *postProcessorSystem; PostProcessorSystem *postProcessorSystem;
Client *client;
Settings *settings;
WidgetManager *widgetManager; WidgetManager *widgetManager;
@@ -90,8 +96,7 @@ private:
void binding(); void binding();
void initializeSystems(); void initializeSystems();
void callUpdateList(); void callUpdateList();
void lostConnection(); void showError(ErrorsEnum errorEnum);
void serverBlocked();
void checkLoginResult(ServerAuthorization *auth); void checkLoginResult(ServerAuthorization *auth);
void checkAccessType(const QString &accessType); void checkAccessType(const QString &accessType);
void setServerVersion(StreamingVersionData *version); void setServerVersion(StreamingVersionData *version);
@@ -101,6 +106,8 @@ private:
void checkNeedUpdate(bool flag, quint64 size, quint64 fileCount, quint64 deleteCount); void checkNeedUpdate(bool flag, quint64 size, quint64 fileCount, quint64 deleteCount);
void checkUpdate(); void checkUpdate();
void setInlineDebug(QString text);
void createNewServerSettings();
}; };
#endif // COREMANAGER_H #endif // COREMANAGER_H

View File

@@ -12,7 +12,7 @@
MainWindow::MainWindow(QWidget *parent) MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), : QMainWindow(parent),
ui(new Ui::MainWindow), ui(new Ui::MainWindow),
bottomRightPosition(QRect(530,505,250,40)), bottomRightPosition(QRect(530,506,250,40)),
offlinePosition(240,340,300,40) offlinePosition(240,340,300,40)
{ {
ui->setupUi(this); ui->setupUi(this);
@@ -97,16 +97,37 @@ void MainWindow::setNeedUpdateState(const QString& notifyText)
ui->autostartCheckBox->show(); ui->autostartCheckBox->show();
} }
void MainWindow::serverBlocked()
{
ui->notificationLabel->show();
QPalette palette = ui->notificationLabel->palette();
QColor orangeColor(255,165,0);
palette.setColor(ui->notificationLabel->foregroundRole(),orangeColor);
ui->notificationLabel->setText(tr("Сервер заблокирован"));
ui->notificationLabel->setPalette(palette); void MainWindow::showError(ErrorsEnum errorNum)
timer->start(3000); {
if (errorNum == ErrorsEnum::BLOCKED)
{
serverNotifyShow(tr("Сервер заблокирован"));
}
else if (errorNum == ErrorsEnum::DISABLE)
{
showConnectionEmpty();
}
else if (errorNum == ErrorsEnum::LOGIN_OR_PASS)
{
serverNotifyShow(tr("Неверный логин/пароль"));
}
else if (errorNum == ErrorsEnum::ARCHIVED)
{
serverNotifyShow(tr("Пользователь в архиве"));
}
else if (errorNum == ErrorsEnum::ALREADYLOGIN)
{
serverNotifyShow(tr("Пользователь уже в сети"));
}
}
void MainWindow::serverNotifyShow(QString text, int durationMS)
{
ui->notificationLabel->setText(text);
ui->notificationLabel->show();
timer->start(durationMS);
} }
void MainWindow::setLoginSuccessState() void MainWindow::setLoginSuccessState()
@@ -116,19 +137,6 @@ void MainWindow::setLoginSuccessState()
ui->versionLayoutWidget->show(); ui->versionLayoutWidget->show();
} }
void MainWindow::setLoginFailedState()
{
ui->notificationLabel->setText(tr("Неверный логин/пароль"));
timer->setInterval(3000);
timer->start();
QPalette palette = ui->notificationLabel->palette();
palette.setColor(ui->notificationLabel->foregroundRole(), Qt::red);
ui->notificationLabel->setPalette(palette);
ui->notificationLabel->show();
}
void MainWindow::setStartOfflineButton(bool isAvailable) void MainWindow::setStartOfflineButton(bool isAvailable)
{ {
ui->offlineStartButton->setEnabled(isAvailable); ui->offlineStartButton->setEnabled(isAvailable);
@@ -327,7 +335,7 @@ void MainWindow::addWidgetToInteractiveGroup(EntryWidget *entryWidget)
this->entryWidget = entryWidget; this->entryWidget = entryWidget;
} }
void MainWindow::setLoadSettings(ServerSettings *serverSettings) void MainWindow::setLoadSettings(Settings *serverSettings)
{ {
ui->retranslateUi(this); ui->retranslateUi(this);

View File

@@ -29,9 +29,8 @@ public:
void initialize(ResourceManager *resourceManager); void initialize(ResourceManager *resourceManager);
void addWidgetToChangeGroup(CommonButtonGroupWidget *commonWidgetGroup); void addWidgetToChangeGroup(CommonButtonGroupWidget *commonWidgetGroup);
void addWidgetToInteractiveGroup(EntryWidget *entryWidget); void addWidgetToInteractiveGroup(EntryWidget *entryWidget);
void setLoadSettings(ServerSettings *serverSettings); void setLoadSettings(Settings *serverSettings);
void setLoginSuccessState(); void setLoginSuccessState();
void setLoginFailedState();
void setClientVersionName(const QString &versionName); void setClientVersionName(const QString &versionName);
void loadToServer(); void loadToServer();
@@ -47,9 +46,11 @@ public:
void showOfflineButton(bool flag); void showOfflineButton(bool flag);
void setStartOfflineButton(bool isAvailable); void setStartOfflineButton(bool isAvailable);
void setStartState(); void setStartState();
void serverBlocked(); void serverNotifyShow(QString text, int durationMS = 3000);
void showError(ErrorsEnum errorNum);
QHBoxLayout *getDisplayLayout() const; QHBoxLayout *getDisplayLayout() const;
void serverBlockedState();
public slots: public slots:
void slotShowUpdateInfo(); void slotShowUpdateInfo();
void slotConnectionState(bool flag); void slotConnectionState(bool flag);

View File

@@ -427,7 +427,7 @@
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>530</x> <x>530</x>
<y>510</y> <y>511</y>
<width>250</width> <width>250</width>
<height>40</height> <height>40</height>
</rect> </rect>

2
mathModelConfig.xml Normal file
View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<MathModelSettings SendIP="10.100.7.255" SendPortMath="18004" ListenIP="10.100.7.9" LocalPortMath="18003" />

2
path.txt Normal file
View File

@@ -0,0 +1,2 @@
D:/QT/Projects/RRJClient/path.txt
D:/QT/Projects/RRJClient/Application/RRJLoader/RRJ_Data/StreamingAssets

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -35,7 +35,7 @@ void WidgetManager::binding()
connect(commonButtonGroupWidget,&CommonButtonGroupWidget::sigUpdateCommonWidget,mainWindow,&MainWindow::slotCommonWidgetState); connect(commonButtonGroupWidget,&CommonButtonGroupWidget::sigUpdateCommonWidget,mainWindow,&MainWindow::slotCommonWidgetState);
connect(mainWindow,&MainWindow::sigShowSettings,this,&WidgetManager::showSettings,Qt::AutoConnection); connect(mainWindow,&MainWindow::sigShowSettings,this,&WidgetManager::showSettings,Qt::AutoConnection);
} }
void WidgetManager::slotSetLoadSettings(ServerSettings *settings) void WidgetManager::slotSetLoadSettings(Settings *settings)
{ {
mainWindow->setLoadSettings(settings); mainWindow->setLoadSettings(settings);
entryWidget->fillSettings(settings); entryWidget->fillSettings(settings);
@@ -60,7 +60,6 @@ void WidgetManager::setLoginSuccess()
void WidgetManager::setLoginFailed() void WidgetManager::setLoginFailed()
{ {
entryWidget->showLoginWidget(true); entryWidget->showLoginWidget(true);
mainWindow->setLoginFailedState();
activateLoadingAnimation(false); activateLoadingAnimation(false);
} }
@@ -106,6 +105,7 @@ void WidgetManager::setNeedUpdateState(quint64 size, quint64 fileCount,quint64 d
result = tr("Файлов к удалению: ") + QString::number(deleteCount); result = tr("Файлов к удалению: ") + QString::number(deleteCount);
} }
updateWidget->closeWindow();
mainWindow->setNeedUpdateState(result); mainWindow->setNeedUpdateState(result);
commonButtonGroupWidget->needUpdateState(true); commonButtonGroupWidget->needUpdateState(true);
waitAnimationWidget->hideWithStop(); waitAnimationWidget->hideWithStop();
@@ -157,10 +157,11 @@ void WidgetManager::setServerDisconnectState()
void WidgetManager::setUndoCurrentChangesState() void WidgetManager::setUndoCurrentChangesState()
{ {
waitAnimationWidget->showWithPlay();
mainWindow->undoCurrentChanges(); mainWindow->undoCurrentChanges();
updateWidget->hide(); updateWidget->hide();
commonButtonGroupWidget->showProgressBar(false); commonButtonGroupWidget->showProgressBar(true);
waitAnimationWidget->showWithPlay(); //waitAnimationWidget->hideWithStop();
} }
void WidgetManager::showMainFrame(bool flag) void WidgetManager::showMainFrame(bool flag)

View File

@@ -49,7 +49,7 @@ public:
void slotInlineDebug(const QString &text); void slotInlineDebug(const QString &text);
public slots: public slots:
void showSettings(bool isActive); void showSettings(bool isActive);
void slotSetLoadSettings(ServerSettings *settings); void slotSetLoadSettings(Settings *settings);
void slotActivateLoadAnimation(bool flag); void slotActivateLoadAnimation(bool flag);
signals: signals: