feat: complete delay messages

This commit is contained in:
semenov
2025-08-05 16:34:26 +03:00
parent a6022d7ec8
commit c3bd64588a
12 changed files with 51 additions and 61 deletions

View File

@@ -10,15 +10,7 @@ void ChatSystem::initialize(CommonClientHandler *commonClientHandler, DataParser
this->commonClientHandler = commonClientHandler;
this->dataParser = dataParser;
this->clientsMap = clientsMap;
clientNotSendedMessage = new QMap<QString,QStack<ClientMessage>*>;
auto stack = new QStack<ClientMessage>;
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);
clientNotSendedMessage = new QMap<QString,QQueue<ClientMessage>*>;
}
bool ChatSystem::sendTo(ClientMessage message)
@@ -26,16 +18,14 @@ bool ChatSystem::sendTo(ClientMessage message)
QByteArray byteArrayMsg = dataParser->ClientAnswer()->message(message.From,message.To,message.Text);
auto result = message.To.split("-");
//qt - инструктор
//qt - клиент нельзя
//unity - можно
foreach(int idSocket, clientsMap->keys())
{
ClientHandler *handler = clientsMap->value(idSocket);
QString userType = QString::number(static_cast<int>(handler->getClient()->getAccessType()));
if(handler->getClient()->getId() == result[0] &&
userType == result[1])
userType == result[1] &&
handler->getClient()->getTypeClient() != TypeClientAutorization::TYPE_QT_CLIENT)
{
handler->sendXmlAnswer(byteArrayMsg, PacketType::TYPE_XMLANSWER);
QString str = "Msg From Client [" + message.From + " to " + message.To + "] : " + message.Text;
@@ -60,8 +50,8 @@ bool ChatSystem::sendMessage(ClientMessage message)
}
else
{
auto stack = new QStack<ClientMessage>;
stack->append(message);
auto stack = new QQueue<ClientMessage>;
stack->enqueue(message);
clientNotSendedMessage->insert(message.To, stack);
}
@@ -76,11 +66,11 @@ void ChatSystem::sendOldMessages(QString id)
qDebug() << id;
if (clientNotSendedMessage->contains(id))
{
auto stack = clientNotSendedMessage->find(id).value();
auto queue = clientNotSendedMessage->find(id).value();
while (!stack->isEmpty())
while (!queue->isEmpty())
{
auto message = stack->pop();
auto message = queue->dequeue();
sendTo(message);
}
}