mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer.git
synced 2026-03-27 19:45:43 +03:00
refact1
This commit is contained in:
168
LibInstructorsAndTrainees/messanger/messangercontroller.cpp
Normal file
168
LibInstructorsAndTrainees/messanger/messangercontroller.cpp
Normal file
@@ -0,0 +1,168 @@
|
||||
#include "messangercontroller.h"
|
||||
|
||||
MessangerController::MessangerController(ConnectorToServer* connectorToServer, QObject *parent) :
|
||||
QObject(parent),
|
||||
connectorToServer(connectorToServer),
|
||||
userLocalGUI_ID(0)
|
||||
{
|
||||
connect(connectorToServer, &ConnectorToServer::signal_receiveMessage, this, &MessangerController::slot_receiveMessage);
|
||||
}
|
||||
|
||||
MessangerController::~MessangerController()
|
||||
{
|
||||
deleteAllWidgets();
|
||||
}
|
||||
|
||||
MessangerWidget *MessangerController::newWidget(QWidget *parent, User* user, QVBoxLayout* boxLayout)
|
||||
{
|
||||
MessangerWidget *msgWdgt = new MessangerWidget(parent);
|
||||
|
||||
if(boxLayout)
|
||||
boxLayout->addWidget(msgWdgt);
|
||||
|
||||
connect(msgWdgt, &MessangerWidget::signal_sendMessage, this, &MessangerController::slot_sendMessage);
|
||||
|
||||
msgWdgt->initUserLocalGUI(connectorToServer->getInstructor(userLocalGUI_ID));
|
||||
|
||||
if(user)
|
||||
{
|
||||
msgWdgt->initUserRemote(*user);
|
||||
|
||||
//Заполнение предыстории
|
||||
int id_user = user->getID();
|
||||
QList<MessageOfMessanger>* list = nullptr;
|
||||
if(mapAlldialogsWithClients.contains(id_user))
|
||||
{//Уже есть
|
||||
list = mapAlldialogsWithClients.value(id_user);
|
||||
|
||||
for(MessageOfMessanger msg : *list)
|
||||
{
|
||||
if(msg.flLocal)
|
||||
msgWdgt->showSendedMessage(ClientMessage(QString::number(userLocalGUI_ID), QString::number(id_user), msg.text, msg.time.toString("hh:mm")));
|
||||
else
|
||||
msgWdgt->showReceivedMessage(ClientMessage(QString::number(id_user), QString::number(userLocalGUI_ID), msg.text, msg.time.toString("hh:mm")));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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::deleteAllWidgets()
|
||||
{
|
||||
for(MessangerWidget* widget : listWidgets)
|
||||
delete widget;
|
||||
listWidgets.clear();
|
||||
|
||||
mapAlldialogsWithClients.clear();
|
||||
}
|
||||
|
||||
void MessangerController::setUserLocalGUI_ID(int id)
|
||||
{
|
||||
userLocalGUI_ID = id;
|
||||
|
||||
for(MessangerWidget* widget : listWidgets)
|
||||
{
|
||||
widget->initUserLocalGUI(connectorToServer->getInstructor(userLocalGUI_ID));
|
||||
}
|
||||
}
|
||||
|
||||
void MessangerController::slot_sendMessage(ClientMessage clientMessage)
|
||||
{
|
||||
connectorToServer->slot_sendMessage(clientMessage);
|
||||
|
||||
showMessageInAllWidgets(clientMessage);
|
||||
}
|
||||
|
||||
void MessangerController::slot_receiveMessage(ClientMessage clientMessage)
|
||||
{
|
||||
int id_user = clientMessage.fromId.toInt();
|
||||
|
||||
Instructor instructor = connectorToServer->getInstructor(id_user);
|
||||
if(instructor.getID())
|
||||
emit signal_receiveMessage_fromInstructor(clientMessage);
|
||||
else
|
||||
{
|
||||
Trainee trainee = connectorToServer->getTrainee(id_user);
|
||||
if(trainee.getID())
|
||||
emit signal_receiveMessage_fromTrainee(clientMessage);
|
||||
}
|
||||
|
||||
showMessageInAllWidgets(clientMessage);
|
||||
}
|
||||
|
||||
void MessangerController::slot_reinitMessangers(QList<User> listUsers)
|
||||
{
|
||||
for(MessangerWidget* widget : listWidgets)
|
||||
{
|
||||
for(User user : listUsers)
|
||||
{
|
||||
if(user.getID() == widget->getIDuserRemote())
|
||||
{
|
||||
widget->reinitMessangerWidget(user);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MessangerController::showMessageInAllWidgets(ClientMessage clientMessage)
|
||||
{
|
||||
int id_user = 0;
|
||||
MessageOfMessanger msg;
|
||||
|
||||
if(clientMessage.fromId == QString::number(userLocalGUI_ID))
|
||||
{//Send
|
||||
id_user = clientMessage.toId.toInt();
|
||||
msg.flLocal = true;
|
||||
}
|
||||
else
|
||||
{//Receive
|
||||
id_user = clientMessage.fromId.toInt();
|
||||
msg.flLocal = false;
|
||||
}
|
||||
|
||||
|
||||
QList<MessageOfMessanger>* list = nullptr;
|
||||
if(mapAlldialogsWithClients.contains(id_user))
|
||||
{//Уже есть
|
||||
list = mapAlldialogsWithClients.value(id_user);
|
||||
}
|
||||
else
|
||||
{//Новый
|
||||
list = new QList<MessageOfMessanger>();
|
||||
mapAlldialogsWithClients.insert(id_user, list);
|
||||
}
|
||||
|
||||
msg.text = clientMessage.Text;
|
||||
msg.time = QTime::currentTime();
|
||||
list->append(msg);
|
||||
|
||||
clientMessage.timeStr = msg.time.toString("hh:mm");
|
||||
|
||||
for(MessangerWidget* widget : listWidgets)
|
||||
{
|
||||
if(widget->getIDuserRemote() == id_user)
|
||||
{
|
||||
if(msg.flLocal)
|
||||
widget->showSendedMessage(clientMessage);
|
||||
else
|
||||
widget->showReceivedMessage(clientMessage);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user