Files
RRJServer/ServerLMS/Systems/chatsystem.cpp
2025-07-31 10:21:47 +03:00

84 lines
2.2 KiB
C++

#include "chatsystem.h"
ChatSystem::ChatSystem()
{
}
void ChatSystem::initialize(CommonClientHandler *commonClientHandler, DataParser *dataParser, QMap<int, ClientHandler*> *clientsMap)
{
this->commonClientHandler = commonClientHandler;
this->dataParser = dataParser;
this->clientsMap = clientsMap;
clientNotSendedMessage = new QMap<QString,QStack<ClientMessage>*>;
auto stack = new QStack<ClientMessage>;
auto clientMessage1 = ClientMessage("1","102","Сообщение 1");
stack->append(clientMessage1);
auto clientMessage2 = ClientMessage("1","102","Сообщение 2");
stack->append(clientMessage2);
clientNotSendedMessage->insert("102", stack);
}
bool ChatSystem::sendTo(ClientMessage message)
{
QByteArray byteArrayMsg = dataParser->ClientAnswer()->message(message.From,message.To,message.Text);
foreach(int idSocket, clientsMap->keys())
{
ClientHandler *handler = clientsMap->value(idSocket);
if(handler->getClient()->getId() == message.To)
{
handler->sendXmlAnswer(byteArrayMsg, PacketType::TYPE_XMLANSWER);
QString str = "Msg From Client [" + message.From + " to " + message.To + "] : " + message.Text;
return true;
}
}
return false;
}
bool ChatSystem::sendMessage(ClientMessage message)
{
bool isSended = false;
isSended = sendTo(message);
if (!isSended)
{
if (clientNotSendedMessage->contains(message.To))
{
clientNotSendedMessage->find(message.To).value()->append(message);
}
else
{
auto stack = new QStack<ClientMessage>;
stack->append(message);
clientNotSendedMessage->insert(message.To, stack);
}
qDebug() << "Message stack count: " + QString::number(clientNotSendedMessage->count());
}
return true;
}
void ChatSystem::sendOldMessages(QString id)
{
if (clientNotSendedMessage->contains(id))
{
auto stack = clientNotSendedMessage->find(id).value();
while (!stack->isEmpty())
{
auto message = stack->pop();
sendTo(message);
}
}
else
{
qDebug() << "client empty";
}
}