#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-0","102-0","Сообщение 1"); stack->append(clientMessage1); auto clientMessage2 = ClientMessage("1-0","102-0","Сообщение 2"); stack->append(clientMessage2); clientNotSendedMessage->insert("102", stack); } bool ChatSystem::sendTo(ClientMessage message) { QByteArray byteArrayMsg = dataParser->ClientAnswer()->message(message.From,message.To,message.Text); auto result = message.To.split("-"); foreach(int idSocket, clientsMap->keys()) { ClientHandler *handler = clientsMap->value(idSocket); QString userType = QString::number(static_cast(handler->getClient()->getAccessType())); if(handler->getClient()->getId() == result[0] && userType == result[1]) { 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"; } }