mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer.git
synced 2026-03-28 19:55:48 +03:00
84 lines
2.2 KiB
C++
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";
|
|
}
|
|
}
|