ref: segregate chat sytem

This commit is contained in:
semenov
2025-07-31 10:21:47 +03:00
parent 88239e8491
commit 5a07c144a1
24 changed files with 585 additions and 144 deletions

View File

@@ -139,6 +139,14 @@ void SendSystem::sendChangeVersion(StreamingVersionData *streamingVersion)
socket->waitForReadyRead(100);
}
void SendSystem::sendOldMessages()
{
QDataStream stream(socket);
stream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
stream << PacketType::TYPE_GET_OLD_MESSAGES;
socket->waitForReadyRead(100);
}
void SendSystem::sendDeleteVersion(StreamingVersionData *streamingVersion)
{
QDataStream stream(socket);

View File

@@ -27,6 +27,7 @@ public:
void sendCopyVersion(QString versionName);
void sendPacketType(PacketType packetType);
void sendOldMessages();
signals:
void sigSend();
QByteArray sigGetXmlAnswer(QString);

View File

@@ -35,6 +35,7 @@ enum PacketType{
TYPE_QT = 9,
TYPE_DISABLE = 11,
TYPE_CHECKVERSION = 13,
TYPE_GET_OLD_MESSAGES = 22,
TYPE_XMLANSWER_MESSAGE_FOR_GUI = 90,

View File

@@ -471,3 +471,8 @@ void ConnectorToServer::clearListModelDB()
listTaskFimArray.clear();
listTaskAmmArray.clear();
}
SendSystem *ConnectorToServer::getSendSystem() const
{
return sendSystem;
}

View File

@@ -67,6 +67,8 @@ public:
ServerSettings getServerSettings();
bool getIsConnected();
SendSystem *getSendSystem() const;
public slots:
void slot_AnswerQueryToDB_ListInstructors(QList<Instructor> listInstructors);
void slot_AnswerQueryToDB_ListGroups(QList<Group> listGroups);

View File

@@ -218,7 +218,6 @@ void InstructorsAndTraineesWidget::checkLoginResult(ServerAuthorization *serverA
connectorToServer->sendQueryTasksXML("fim");
connectorToServer->sendQueryTasksXML("amm");
messangerWidget->initialize(idInstructorLoggedInLocal);
//QMessageBox::information(this, tr("Instructor authorization"), tr("Successfully!"));
}
else

View File

@@ -11,8 +11,8 @@
MessangerWidget::MessangerWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MessangerWidget),
currLogin(""),
currId("")
selectedUserLogin(""),
selectedUserId("")
{
ui->setupUi(this);
@@ -38,7 +38,7 @@ void MessangerWidget::addMsgFromClient(Trainee trainee, QString text)
QString login = trainee.getLogin();
foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger)
{//Есть такой
if(tabDialog->getLogin() == trainee.getLogin())
if(tabDialog->getUserLogin() == trainee.getLogin())
{
//Добавляем в существующую вкладку
ui->tabWidget->setCurrentIndex(getIndexTab(login));
@@ -46,8 +46,8 @@ void MessangerWidget::addMsgFromClient(Trainee trainee, QString text)
//Делаем ее текущей
ui->tabWidget->setCurrentIndex(getIndexTab(login));
currLogin = login;
currId = QString::number(trainee.getID());
selectedUserLogin = login;
selectedUserId = QString::number(trainee.getID());
return;
}
}
@@ -62,9 +62,9 @@ void MessangerWidget::addTabDialogMessenger(Trainee trainee)
{
if(listTabDialogMessenger.count() == 0)
{//Самая первая вкладка, делаем ее активной
currLogin = trainee.getLogin();
currId = QString::number(trainee.getID());
emit signal_tabMessengerChanged(currLogin);
selectedUserLogin = trainee.getLogin();
selectedUserId = QString::number(trainee.getID());
emit signal_tabMessengerChanged(selectedUserLogin);
ui->btnSend->setEnabled(true);
ui->editMsg->setEnabled(true);
}
@@ -72,7 +72,7 @@ void MessangerWidget::addTabDialogMessenger(Trainee trainee)
//Проверяем наличие диалога с этим клиентом
foreach(TabDialogMessenger* dialogMsg, listTabDialogMessenger)
{
if(dialogMsg->getLogin() == trainee.getLogin())
if(dialogMsg->getUserLogin() == trainee.getLogin())
{//Диалог для этого клиента уже существует
//Обновляем статус залогинивания
if(trainee.getLoggedIn())
@@ -86,7 +86,7 @@ void MessangerWidget::addTabDialogMessenger(Trainee trainee)
//Диалога для этого клиента еще не существует
//Помещаем новый диалог в список диалогов
TabDialogMessenger* tabDialog = new TabDialogMessenger(0 /*TODO доделать передачу реального ID*/, trainee.getLogin(), this);
TabDialogMessenger* tabDialog = new TabDialogMessenger(trainee.getLogin(),QString::number(trainee.getID()), this);
listTabDialogMessenger.append(tabDialog);
//Добавляем новую вкладку диалога
@@ -103,7 +103,7 @@ void MessangerWidget::actualizationTabsDialogMessenger()
{
foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger)
{
QString login = tabDialog->getLogin();
QString login = tabDialog->getUserLogin();
bool exist = false;
for(Trainee trainee : listTrainees)
@@ -136,7 +136,7 @@ int MessangerWidget::getIndexTab(QString login)
for(int index = 0; index < ui->tabWidget->count(); index++)
{
TabDialogMessenger* tabDialogMessenger = static_cast<TabDialogMessenger*>(ui->tabWidget->widget(index));
if(tabDialogMessenger->getLogin() == login)
if(tabDialogMessenger->getUserLogin() == login)
return index;
}
return -1;
@@ -154,19 +154,19 @@ void MessangerWidget::on_btnSend_clicked()
{
QString text = ui->editMsg->toPlainText();
emit signal_sendMessage(currClientId, currId, text);
emit signal_sendMessage(currClientId, selectedUserId, text);
ui->editMsg->clear();
//Ищем нужный диалог
foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger)
{
if(tabDialog->getLogin() == currLogin)
if(tabDialog->getUserLogin() == selectedUserLogin)
{
//Добавляем в существующую вкладку
tabDialog->addMsgWidgetLocal(text);
//Делаем ее активной
ui->tabWidget->setCurrentIndex(getIndexTab(currLogin));
ui->tabWidget->setCurrentIndex(getIndexTab(selectedUserLogin));
return;
}
@@ -178,10 +178,12 @@ void MessangerWidget::on_tabWidget_currentChanged(int index)
//Ищем нужный диалог
foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger)
{
if(getIndexTab(tabDialog->getLogin()) == index)
if(getIndexTab(tabDialog->getUserLogin()) == index)
{
currLogin = tabDialog->getLogin();
emit signal_tabMessengerChanged(currLogin);
selectedUserLogin = tabDialog->getUserLogin();
selectedUserId = tabDialog->getUserId();
emit signal_tabMessengerChanged(selectedUserLogin);
return;
}
}
@@ -192,7 +194,7 @@ void MessangerWidget::slot_traineeSelected(QString login)
//Ищем нужный диалог
foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger)
{
if(tabDialog->getLogin() == login)
if(tabDialog->getUserLogin() == login)
{
//Активируем нужную вкладку
ui->tabWidget->setCurrentIndex(getIndexTab(login));

View File

@@ -67,8 +67,8 @@ private:
Ui::MessangerWidget *ui;
QList <TabDialogMessenger*> listTabDialogMessenger;
QList<Trainee> listTrainees;
QString currLogin; //Логин клиента текущего диалога
QString currId; //id клиента текущего диалога
QString selectedUserLogin; //Логин клиента текущего диалога
QString selectedUserId; //id клиента текущего диалога
QString currClientId; //id этого клиента
QTranslator qtLanguageTranslator;
};

View File

@@ -3,12 +3,12 @@
#include "msgwidget.h"
TabDialogMessenger::TabDialogMessenger(int id, QString login, QWidget *parent):
TabDialogMessenger::TabDialogMessenger(QString login , QString userId, QWidget *parent):
QListWidget(parent),
login(""),
id(0)
userId("")
{
this->id = id;
this->userId = userId;
this->login = login;
setWordWrap(true);

View File

@@ -12,18 +12,18 @@ class TabDialogMessenger : public QListWidget
Q_OBJECT
public:
TabDialogMessenger(int id, QString login, QWidget *parent = nullptr);
TabDialogMessenger(QString userLogin, QString userId, QWidget *parent = nullptr);
~TabDialogMessenger();
QString getLogin() {return login;};
int getID() {return id;};
QString getUserLogin() {return login;};
QString getUserId() {return userId;}
void addMsgWidgetLocal(QString text);
void addMsgWidgetRemote(QString text);
private:
QString login;
int id;
QString userId;
};
#endif // TABDIALOGMESSENGER_H