#include "chatsystem.h" ChatSystem::ChatSystem() { } void ChatSystem::initialize(CommonClientHandler *commonClientHandler, DataParser *dataParser, QMap *clientsMap) { this->commonClientHandler = commonClientHandler; this->dataParser = dataParser; this->clientsMap = clientsMap; clientNotSendedMessage = new QMap*>; auto stack = new QStack; auto clientMessage1 = ClientMessage("1","102","Сообщение 1","1"); stack->append(clientMessage1); auto clientMessage2 = ClientMessage("1","102","Сообщение 2","1"); stack->append(clientMessage2); clientNotSendedMessage->insert("102", stack); } bool ChatSystem::sendTo(ClientMessage message) { QByteArray byteArrayMsg = dataParser->ClientAnswer()->message(message.From,message.To,message.Text,message.Type); 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; 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"; } }