ref: segregate client hashes

This commit is contained in:
semenov
2025-11-20 12:14:50 +03:00
parent 560b7ff4cb
commit bd0bed926c
7 changed files with 78 additions and 19 deletions

View File

@@ -15,6 +15,7 @@ kanban-plugin: board
- [ ] не отправлять updateDocs если не залогинен
- [ ] Отменить изменения работает некрасиво
- [ ] BUSY не меняет иконку блокировки
- [ ] не работают ссылки при выгрузке в QT Client
## feature client Unity

View File

@@ -118,6 +118,15 @@ public:
id = value;
}
QByteArray getClientHash()
{
return clientHash;
}
void setClientHash(const QByteArray &value)
{
clientHash = value;
}
private:
QString name;
QString address;
@@ -131,8 +140,7 @@ private:
TypeClientAutorization typeClient;
UserType userType;
QByteArray clientHash;
};
#endif // CLIENT_H

View File

@@ -12,7 +12,7 @@ enum PacketType
TYPE_COMMAND =3,
TYPE_FOLDER = 4,
TYPE_DELETE = 5,
TYPE_LOADING_FINISH_WITHOUT_DOCS = 6,
UPDATE_FILES_COMPLETE = 6,
TYPE_NEEDUPDATE = 7,
TYPE_XMLANSWER = 8,
TYPE_QT = 9,
@@ -21,7 +21,7 @@ enum PacketType
TYPE_CHECK_VERSION = 13,
TYPE_FILESIZE = 20,
TYPE_BIGXML = 21,
TYPE_FULL_LOADING_FINISH = 22,
UPDATE_DOCS_COMPLETE = 22,
TYPE_XMLANSWER_MESSAGE_FOR_GUI = 90,
@@ -54,6 +54,7 @@ enum PacketType
RECALCULATE_HASH = 156,
RECALCULATE_DOCS = 157,
GET_DOCS = 158,
SEND_HASH = 159
};
template<typename T>
@@ -68,7 +69,7 @@ inline QString enumToString(PacketType value) {
case PacketType::TYPE_COMMAND: return "TYPE_COMMAND";
case PacketType::TYPE_FOLDER: return "TYPE_FOLDER";
case PacketType::TYPE_DELETE: return "TYPE_DELETE";
case PacketType::TYPE_LOADING_FINISH_WITHOUT_DOCS: return "TYPE_LOADING_FINISH_WITHOUT_DOCS";
case PacketType::UPDATE_FILES_COMPLETE: return "UPDATE_FILE_COMPLETE";
case PacketType::TYPE_NEEDUPDATE: return "TYPE_NEEDUPDATE";
case PacketType::TYPE_XMLANSWER: return "TYPE_XMLANSWER";
case PacketType::TYPE_QT: return "TYPE_QT";
@@ -77,7 +78,7 @@ inline QString enumToString(PacketType value) {
case PacketType::TYPE_CHECK_VERSION: return "TYPE_CHECK_VERSION";
case PacketType::TYPE_FILESIZE: return "TYPE_FILESIZE";
case PacketType::TYPE_BIGXML: return "TYPE_BIGXML";
case PacketType::TYPE_FULL_LOADING_FINISH: return "TYPE_FULL_LOADING_FINISH";
case PacketType::UPDATE_DOCS_COMPLETE: return "UPDATE_DOCS_COMPLETE";
case PacketType::TYPE_XMLANSWER_MESSAGE_FOR_GUI: return "TYPE_XMLANSWER_MESSAGE_FOR_GUI";
case PacketType::TYPE_XMLANSWER_QUERY_DB__LIST_INSTRUCTORS: return "TYPE_XMLANSWER_QUERY_DB__LIST_INSTRUCTORS";
case PacketType::TYPE_XMLANSWER_QUERY_DB__LIST_GROUPS: return "TYPE_XMLANSWER_QUERY_DB__LIST_GROUPS";
@@ -99,6 +100,7 @@ inline QString enumToString(PacketType value) {
case PacketType::RECALCULATE_HASH: return "HASH_CALCULATE_START";
case PacketType::RECALCULATE_DOCS: return "RECALCULATE_DOCS";
case PacketType::GET_DOCS: return "GET_DOCS";
case PacketType::SEND_HASH: return "SEND_HASH";
default: return "Unknown";

View File

@@ -36,7 +36,7 @@ void RecognizeSystem::initialize(UpdateController *updateController,DataParser*
void RecognizeSystem::recognize()
{
QMutexLocker locker(mutex);
QMutexLocker locker(mutex);
qDebug() << "Recognize thread ID " << QThread::currentThreadId();
QDataStream stream(socket);
stream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
@@ -118,10 +118,7 @@ void RecognizeSystem::recognize()
if(packetType == PacketType::TYPE_CHECK_VERSION)
{
QFile checkFile(clientHash);
checkFile.open(QIODevice::ReadOnly);
updateController->compareFiles(clientHandler,checkFile.readAll());
checkFile.close();
updateController->compareFiles(clientHandler,client->getClientHash());
}
if (packetType == PacketType::TYPE_XMLANSWER)
@@ -454,11 +451,60 @@ void RecognizeSystem::recognize()
emit sigSendDocs(updateController->getPathAdditionalFile(tasksAMMfileName));
}
// if(packetType == PacketType::RECALCULATE_HASH)
// {
// emit sigCalculateHash();
// }
if (packetType == PacketType::SEND_HASH)
{
QByteArray hash;
forever
{
stream.startTransaction();
stream >> fileSize;
if(!stream.commitTransaction()) continue;
socket->waitForReadyRead(100);
break;
}
forever
{
stream.startTransaction();
stream >> tmpBlock;
if(!stream.commitTransaction()){
if(socket->state() == QAbstractSocket::UnconnectedState){
qDebug() << "UNCONNECT";
//mutex->unlock();
return;
}
if(socket->waitForReadyRead(100)){
continue;
}
continue;
}
hash += tmpBlock;
sizeReceiveData += tmpBlock.length();
countSend++;
tmpBlock.clear();
if(sizeReceiveData == fileSize) break;
}
QString logMessage = "Load from " + client->getLogin() + " ";
filePath.clear();
fileSize = 0;
tmpBlock.clear();
sizeReceiveData = 0;
countSend = 0;
packetType = PacketType::TYPE_NONE;
client->setClientHash(hash);
}
packetType = PacketType::TYPE_NONE;
}

View File

@@ -312,7 +312,8 @@ void SendSystem::updateFiles(QList<FileData> fileSendList, QList<FileData> delet
}
}
sendPacketType(PacketType::TYPE_LOADING_FINISH_WITHOUT_DOCS);
//sendPacketType(PacketType::UPDATE_FILES_COMPLETE);
sendPacketType(PacketType::UPDATE_FILES_COMPLETE);
}
@@ -334,7 +335,7 @@ void SendSystem::sendStop()
void SendSystem::sendDocs(QString docsPath)
{
sendFileBlock(docsPath);
sendPacketType(PacketType::TYPE_FULL_LOADING_FINISH);
//sendPacketType(PacketType::UPDATE_DOCS_COMPLETE);
}
bool SendSystem::getIsSendStopped() const

View File

@@ -29,7 +29,7 @@ static const QString buildHashName = staticDataFolderName + "/buildHash.xml";
static const QString buildDataPath = "/Application/" + projectFolderName + "/RRJ_Data/";
static const QString tasksAMMfileName = "/docs.xml"; //"/tasksAmm.xml";
static const QString tasksFIMfileName = "/tasksFIM.xml";
static const QString clientHash = staticDataFolderName + "/clientHash.xml";
//static const QString clientHash = staticDataFolderName + "/clientHash.xml";
static const QString logFolderPath = "log";
static const QString configFolderName = "config";

View File

@@ -158,7 +158,8 @@ void ClientHandler::sendNotify(QString text)
void ClientHandler::sendNeedUpdate(bool flag, quint64 size, quint64 fileCount,quint64 deleteCount)
{
emit sigNeedUpdate(flag,size,fileCount,deleteCount);
Logger::instance().log(client->getLogin() + " send need update");
Logger::instance().
log(client->getLogin() + " send need update");
}
void ClientHandler::sendDisable()