mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer.git
synced 2026-03-27 19:45:43 +03:00
151 lines
3.8 KiB
C++
151 lines
3.8 KiB
C++
#include "messangercontroller.h"
|
|
|
|
MessangerController::MessangerController(ConnectorToServer* connectorToServer, QObject *parent) :
|
|
QObject(parent),
|
|
connectorToServer(connectorToServer),
|
|
GUIclientId("")
|
|
{
|
|
connect(connectorToServer, &ConnectorToServer::signal_receiveMessage, this, &MessangerController::slot_receiveMessage);
|
|
}
|
|
|
|
MessangerController::~MessangerController()
|
|
{
|
|
for(MessangerWidget* widget : listWidgets)
|
|
delete widget;
|
|
}
|
|
|
|
MessangerWidget *MessangerController::newWidget(QWidget *parent, Trainee* trainee, QVBoxLayout* boxLayout)
|
|
{
|
|
MessangerWidget *msgWdgt = new MessangerWidget(parent);
|
|
|
|
if(boxLayout)
|
|
boxLayout->addWidget(msgWdgt);
|
|
|
|
connect(msgWdgt, &MessangerWidget::signal_sendMessage, this, &MessangerController::slot_sendMessage);
|
|
|
|
msgWdgt->initialize(GUIclientId);
|
|
|
|
if(trainee)
|
|
{
|
|
msgWdgt->setOneTrainee(*trainee);
|
|
|
|
//Заполнение предыстории
|
|
int id_user = trainee->getID();
|
|
QList<MessageOfMessanger>* list = nullptr;
|
|
if(mapAlldialogsWithClients.contains(id_user))
|
|
{//Уже есть
|
|
list = mapAlldialogsWithClients.value(id_user);
|
|
|
|
for(MessageOfMessanger msg : *list)
|
|
{
|
|
if(msg.flLocal)
|
|
msgWdgt->showSendedMessage(msg.text);
|
|
else
|
|
msgWdgt->showReceivedMessage(ClientMessage(QString::number(id_user), GUIclientId, msg.text));
|
|
}
|
|
}
|
|
}
|
|
|
|
listWidgets.append(msgWdgt);
|
|
|
|
return msgWdgt;
|
|
}
|
|
|
|
void MessangerController::deleteWidget(MessangerWidget *msgWdgt)
|
|
{
|
|
for(int i = 0; i < listWidgets.count(); i++)
|
|
{
|
|
if(listWidgets.at(i) == msgWdgt)
|
|
{
|
|
delete msgWdgt;
|
|
listWidgets.removeAt(i);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void MessangerController::setGUIclientId(QString id)
|
|
{
|
|
GUIclientId = id;
|
|
|
|
for(MessangerWidget* widget : listWidgets)
|
|
{
|
|
widget->initialize(GUIclientId);
|
|
}
|
|
}
|
|
|
|
void MessangerController::clearAllWidgets()
|
|
{
|
|
for(MessangerWidget* widget : listWidgets)
|
|
{
|
|
widget->clear();
|
|
}
|
|
}
|
|
|
|
|
|
void MessangerController::slot_sendMessage(ClientMessage clientMessage)
|
|
{
|
|
connectorToServer->slot_sendMessage(clientMessage);
|
|
|
|
int id_user = clientMessage.toId.toInt();
|
|
QList<MessageOfMessanger>* list = nullptr;
|
|
if(mapAlldialogsWithClients.contains(id_user))
|
|
{//Уже есть
|
|
list = mapAlldialogsWithClients.value(id_user);
|
|
}
|
|
else
|
|
{//Новый
|
|
list = new QList<MessageOfMessanger>();
|
|
mapAlldialogsWithClients.insert(id_user, list);
|
|
}
|
|
MessageOfMessanger msg;
|
|
msg.flLocal = true;
|
|
msg.text = clientMessage.Text;
|
|
list->append(msg);
|
|
|
|
for(MessangerWidget* widget : listWidgets)
|
|
{
|
|
widget->showSendedMessage(clientMessage.Text);
|
|
}
|
|
}
|
|
|
|
void MessangerController::slot_receiveMessage(ClientMessage clientMessage)
|
|
{
|
|
int id_user = clientMessage.fromId.toInt();
|
|
QList<MessageOfMessanger>* list = nullptr;
|
|
if(mapAlldialogsWithClients.contains(id_user))
|
|
{//Уже есть
|
|
list = mapAlldialogsWithClients.value(id_user);
|
|
}
|
|
else
|
|
{//Новый
|
|
list = new QList<MessageOfMessanger>();
|
|
mapAlldialogsWithClients.insert(id_user, list);
|
|
}
|
|
MessageOfMessanger msg;
|
|
msg.flLocal = false;
|
|
msg.text = clientMessage.Text;
|
|
list->append(msg);
|
|
|
|
for(MessangerWidget* widget : listWidgets)
|
|
{
|
|
widget->showReceivedMessage(clientMessage);
|
|
}
|
|
}
|
|
|
|
void MessangerController::slot_initMessanger(QList<Trainee> listTrainees)
|
|
{
|
|
for(MessangerWidget* widget : listWidgets)
|
|
{
|
|
widget->initMessangerWidget(listTrainees);
|
|
}
|
|
}
|
|
|
|
void MessangerController::slot_traineeSelected(QString login)
|
|
{
|
|
for(MessangerWidget* widget : listWidgets)
|
|
{
|
|
widget->traineeSelected(login);
|
|
}
|
|
}
|