отклонение запроса на Управление версиями

This commit is contained in:
2026-01-22 15:18:40 +03:00
parent 2522bc6af5
commit 5415afe264
12 changed files with 156 additions and 16 deletions

View File

@@ -592,6 +592,28 @@ void RecognizeSystem::xmlParser(QByteArray array)
} }
if(xmlReader.name() == "TryBlock")
{
bool result = false;
QString type = "";
foreach(const QXmlStreamAttribute &attr, xmlReader.attributes())
{
QString name = attr.name().toString();
QString value = attr.value().toString();
if (name == "Result"){
result = value == "true" ? true : false;
}
if (name == "Type"){
type = value;
}
}
emit sigTryBlock(result, type);
}
if(xmlReader.name() == "VersionList") if(xmlReader.name() == "VersionList")
{ {

View File

@@ -37,6 +37,7 @@ signals:
void sigErrorAuth(QString error); void sigErrorAuth(QString error);
void sigAuth(ServerAuthorization *serverAuth); void sigAuth(ServerAuthorization *serverAuth);
void sigDeAuth(ServerDeAuthorization *serverDeAuth); void sigDeAuth(ServerDeAuthorization *serverDeAuth);
void sigTryBlock(bool result, QString type);
void sigAnswerQueryToDB(QList<Instructor>* listInstructors, void sigAnswerQueryToDB(QList<Instructor>* listInstructors,
QList<Trainee>* listTrainees, QList<Trainee>* listTrainees,
QList<Group>* listGroups); QList<Group>* listGroups);

View File

@@ -150,6 +150,8 @@ void ConnectorToServer::bindConnection()
connect(recognizeSystem,&RecognizeSystem::sigAuth,this,&ConnectorToServer::slot_Auth); connect(recognizeSystem,&RecognizeSystem::sigAuth,this,&ConnectorToServer::slot_Auth);
connect(recognizeSystem,&RecognizeSystem::sigDeAuth,this,&ConnectorToServer::sigDeLoginResult); connect(recognizeSystem,&RecognizeSystem::sigDeAuth,this,&ConnectorToServer::sigDeLoginResult);
connect(recognizeSystem,&RecognizeSystem::sigTryBlock,this,&ConnectorToServer::sigTryBlockResult);
connect(recognizeSystem,&RecognizeSystem::sigServerBlocked,this,&ConnectorToServer::slot_ServerBlocked); connect(recognizeSystem,&RecognizeSystem::sigServerBlocked,this,&ConnectorToServer::slot_ServerBlocked);
connect(recognizeSystem,&RecognizeSystem::sigErrorAuth,this,&ConnectorToServer::slot_ErrorAuth); connect(recognizeSystem,&RecognizeSystem::sigErrorAuth,this,&ConnectorToServer::slot_ErrorAuth);

View File

@@ -130,6 +130,9 @@ signals:
void sigLoginResult(ServerAuthorization * serverAuth); void sigLoginResult(ServerAuthorization * serverAuth);
void sigDeLoginResult(ServerDeAuthorization * serverDeAuth); void sigDeLoginResult(ServerDeAuthorization * serverDeAuth);
void sigTryBlockResult(bool result, QString type);
void sigServerBlocked(); void sigServerBlocked();
void sigErrorAuth(QString error); void sigErrorAuth(QString error);

View File

@@ -51,6 +51,9 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) :
connectorToServer = new ConnectorToServer(); connectorToServer = new ConnectorToServer();
connect(connectorToServer, &ConnectorToServer::sigLoginResult, this, &InstructorsAndTraineesWidget::slot_checkLoginResult); connect(connectorToServer, &ConnectorToServer::sigLoginResult, this, &InstructorsAndTraineesWidget::slot_checkLoginResult);
connect(connectorToServer, &ConnectorToServer::sigDeLoginResult, this, &InstructorsAndTraineesWidget::slot_checkDeLoginResult); connect(connectorToServer, &ConnectorToServer::sigDeLoginResult, this, &InstructorsAndTraineesWidget::slot_checkDeLoginResult);
connect(connectorToServer, &ConnectorToServer::sigTryBlockResult, this, &InstructorsAndTraineesWidget::slot_checkTryBlockResult);
connect(connectorToServer, &ConnectorToServer::sigServerBlocked, this, &InstructorsAndTraineesWidget::slot_ServerBlocked); connect(connectorToServer, &ConnectorToServer::sigServerBlocked, this, &InstructorsAndTraineesWidget::slot_ServerBlocked);
connect(connectorToServer, &ConnectorToServer::sigErrorAuth, this, &InstructorsAndTraineesWidget::slot_ErrorAuth); connect(connectorToServer, &ConnectorToServer::sigErrorAuth, this, &InstructorsAndTraineesWidget::slot_ErrorAuth);
connect(connectorToServer, &ConnectorToServer::signal_SetVersion, this, &InstructorsAndTraineesWidget::slot_SetVersion); connect(connectorToServer, &ConnectorToServer::signal_SetVersion, this, &InstructorsAndTraineesWidget::slot_SetVersion);
@@ -289,6 +292,11 @@ void InstructorsAndTraineesWidget::slot_checkDeLoginResult(ServerDeAuthorization
} }
} }
void InstructorsAndTraineesWidget::slot_checkTryBlockResult(bool result, QString type)
{
}
void InstructorsAndTraineesWidget::slot_ServerBlocked() void InstructorsAndTraineesWidget::slot_ServerBlocked()
{ {
if(flTryLogin) if(flTryLogin)
@@ -695,6 +703,8 @@ void InstructorsAndTraineesWidget::on_btnSettings_clicked()
connect(dlgSettings, &DialogSettings::signal_LanguageChanged, this, &InstructorsAndTraineesWidget::slot_LanguageChanged); connect(dlgSettings, &DialogSettings::signal_LanguageChanged, this, &InstructorsAndTraineesWidget::slot_LanguageChanged);
connect(dlgSettings, &DialogSettings::signal_UpdateStyleSheet, this, &InstructorsAndTraineesWidget::slot_UpdateStyleSheet); connect(dlgSettings, &DialogSettings::signal_UpdateStyleSheet, this, &InstructorsAndTraineesWidget::slot_UpdateStyleSheet);
connect(connectorToServer, &ConnectorToServer::sigTryBlockResult, dlgSettings, &DialogSettings::slot_checkTryBlockResult);
switch( dlgSettings->exec() ) switch( dlgSettings->exec() )
{ {
case QDialog::Accepted: case QDialog::Accepted:

View File

@@ -54,6 +54,8 @@ public Q_SLOTS:
//Слот обработки результата деавторизации //Слот обработки результата деавторизации
void slot_checkDeLoginResult(ServerDeAuthorization * serverDeAuth); void slot_checkDeLoginResult(ServerDeAuthorization * serverDeAuth);
void slot_checkTryBlockResult(bool result, QString type);
void slot_ServerBlocked(); void slot_ServerBlocked();
void slot_ErrorAuth(QString error); void slot_ErrorAuth(QString error);
void slot_SetVersion(StreamingVersionData* serverVersion); void slot_SetVersion(StreamingVersionData* serverVersion);

View File

@@ -5,6 +5,7 @@
#include <QXmlStreamReader> #include <QXmlStreamReader>
#include <QRegExpValidator> #include <QRegExpValidator>
#include "dialogversioncontrol.h" #include "dialogversioncontrol.h"
#include "specialmessagebox.h"
DialogSettings::DialogSettings(ConnectorToServer* connectorToServer, bool instructorIsLogged, QWidget *parent) : DialogSettings::DialogSettings(ConnectorToServer* connectorToServer, bool instructorIsLogged, QWidget *parent) :
QDialog(parent), QDialog(parent),
@@ -12,7 +13,8 @@ DialogSettings::DialogSettings(ConnectorToServer* connectorToServer, bool instru
settings(nullptr), settings(nullptr),
connectorToServer(nullptr), connectorToServer(nullptr),
dlgVersionControl(nullptr), dlgVersionControl(nullptr),
flSettingsServerChanged(false) flSettingsServerChanged(false),
flTryVersionControl(false)
{ {
ui->setupUi(this); ui->setupUi(this);
@@ -214,19 +216,12 @@ void DialogSettings::on_btnSetVersion_clicked()
if(connectorToServer) if(connectorToServer)
if(connectorToServer->getIsConnected()) if(connectorToServer->getIsConnected())
{ {
flTryVersionControl = true;
connectorToServer->sendQueryBlockAuth(true, "VersionControl"); connectorToServer->sendQueryBlockAuth(true, "VersionControl");
dlgVersionControl = new DialogVersionControl(connectorToServer, this); //TODO пока сразу
dlgVersionControl->initialize(connectorToServer->getLoginName()); //slot_VersionControl();
dlgVersionControl->exec();
if(dlgVersionControl)
{
delete dlgVersionControl;
dlgVersionControl = nullptr;
}
connectorToServer->sendQueryBlockAuth(false, "VersionControl");
} }
} }
@@ -258,3 +253,38 @@ void DialogSettings::on_DialogSettings_accepted()
emit signal_LanguageChanged(language); emit signal_LanguageChanged(language);
} }
void DialogSettings::slot_VersionControl()
{
dlgVersionControl = new DialogVersionControl(connectorToServer, this);
dlgVersionControl->initialize(connectorToServer->getLoginName());
dlgVersionControl->exec();
if(dlgVersionControl)
{
delete dlgVersionControl;
dlgVersionControl = nullptr;
}
connectorToServer->sendQueryBlockAuth(false, "VersionControl");
}
void DialogSettings::slot_checkTryBlockResult(bool result, QString type)
{
if(flTryVersionControl)
{
if(type == "VersionControl")
{
if(result)
{//Одобрено
slot_VersionControl();
}
else
{//Отказ
SpecMsgBox::WarningClose(this, tr("The server rejected your request to access version control.\nAnother instructor is managing versions.\nPlease try again later."));
}
flTryVersionControl = false;
}
}
}

View File

@@ -46,6 +46,11 @@ private slots:
void on_editPort_textChanged(const QString &arg1); void on_editPort_textChanged(const QString &arg1);
void on_DialogSettings_accepted(); void on_DialogSettings_accepted();
public slots:
void slot_VersionControl();
void slot_checkTryBlockResult(bool result, QString type);
private: private:
bool saveSettings(); bool saveSettings();
@@ -59,6 +64,8 @@ private:
DialogVersionControl *dlgVersionControl; DialogVersionControl *dlgVersionControl;
bool flSettingsServerChanged; bool flSettingsServerChanged;
bool flTryVersionControl;
}; };
#endif // DIALOGSETTINGS_H #endif // DIALOGSETTINGS_H

View File

@@ -43,6 +43,20 @@ QByteArray ClientAnswerParser::deAuthorization(bool result, QString login)
return dataParser->xmlAnswer(listTag); return dataParser->xmlAnswer(listTag);
} }
QByteArray ClientAnswerParser::tryBlock(bool result, QString type)
{
QList<SXmlAnswerTag> listTag;
SAttribute attribute1 = {"Result", result? "true" : "false"};
SAttribute attribute2 = {"Type", type};
QList<SAttribute> listAttr = {attribute1, attribute2};
SXmlAnswerTag tag = {"TryBlock", listAttr};
listTag.append(tag);
return dataParser->xmlAnswer(listTag);
}
QByteArray ClientAnswerParser::message(QString loginFrom,QString loginTo,QString text) QByteArray ClientAnswerParser::message(QString loginFrom,QString loginTo,QString text)
{ {
QList<SXmlAnswerTag> listTag; QList<SXmlAnswerTag> listTag;

View File

@@ -16,6 +16,7 @@ public:
QByteArray authorization(bool result, QString instructorName, QString clientName, QString accessType, QString login, int id); QByteArray authorization(bool result, QString instructorName, QString clientName, QString accessType, QString login, int id);
QByteArray deAuthorization(bool result, QString login); QByteArray deAuthorization(bool result, QString login);
QByteArray tryBlock(bool result, QString type);
QByteArray message(QString loginFrom,QString loginTo,QString text); QByteArray message(QString loginFrom,QString loginTo,QString text);
QByteArray task(QString text); QByteArray task(QString text);
QByteArray notify(QString code); QByteArray notify(QString code);

View File

@@ -188,7 +188,19 @@ void ProcessingSystem::processingClientDeAutorization(ClientHandler *client, Cli
void ProcessingSystem::processingClientBlockAuth(ClientHandler *client, bool block, QString type) void ProcessingSystem::processingClientBlockAuth(ClientHandler *client, bool block, QString type)
{ {
QByteArray arrayAnswer;
bool res = emit providerDBLMS->signal_BlockAutorization(block, client->getClient()->getFullName(), type); bool res = emit providerDBLMS->signal_BlockAutorization(block, client->getClient()->getFullName(), type);
if(res)
{//Блокировка одобрена
arrayAnswer = dataParser->ClientAnswer()->tryBlock(true, type);
}
else
{//Отказ
arrayAnswer = dataParser->ClientAnswer()->tryBlock(false, type);
}
client->sendXmlAnswer(arrayAnswer);
} }
//упращенная деавторизация при выключении сервера //упращенная деавторизация при выключении сервера

View File

@@ -149,16 +149,50 @@ void MultiThreadServer::slotDisconnectClient(QString peerAddress, QString peerPo
bool MultiThreadServer::slot_BlockAutorization(bool block, QString whoFullName, QString type) bool MultiThreadServer::slot_BlockAutorization(bool block, QString whoFullName, QString type)
{ {
bool res = true; bool res = false;
bool blockRes = false; bool blockRes = false;
QString key = whoFullName + " [type:" + type + "]"; QString key = whoFullName + " [type:" + type + "]";
QString strTypes = ""; QString strTypes = "";
if(block) if(block)
{
if(whoFullName == "SERVER")
{ {
this->blockAutorization(); this->blockAutorization();
blockersMap.insert(key, type); blockersMap.insert(key, type);
blockRes = true; blockRes = true;
res = true;
}
else
{
bool flExist = false;
foreach(QString keyLocal, blockersMap.keys())
{
if(blockersMap[keyLocal] == type)
{
flExist = true;
break;
}
}
if(!flExist)
{
this->blockAutorization();
blockersMap.insert(key, type);
blockRes = true;
res = true;
}
else
{
if(!blockersMap.count())
blockRes = false;
else
blockRes = true;
res = false;
}
}
} }
else else
{ {
@@ -170,6 +204,8 @@ bool MultiThreadServer::slot_BlockAutorization(bool block, QString whoFullName,
} }
else else
blockRes = true; blockRes = true;
res = true;
} }
if(res) if(res)