Witam,
po wysłaniu JSON'a mam następujący problem.
Do klienta, który zgłosi jako pierwszy nie dociera paczka, chociaż sprawdzałem i nie jest wysyłana pusta, tylko dociera do drugiego klienta zawartość prawidłowo.
Proces wysyłania wygląda następująco:
Weryfikacja, czy wszyscy się zgłosili:
case GameSessionReady:
{
bool result = _gameSessionReady(_document);
if(result)
{
int RID = searchRoom(SID);
GameSession *session = gameRooms[RID];
GameTask *task = new GameTask(nullptr,session,GameSessionReady, SID);
task->setAutoDelete(true);
connect(task,SIGNAL(readySignal(QJsonDocument,QJsonDocument, int)),this,SLOT(sendAnswerToPlayers(QJsonDocument, QJsonDocument, int)),Qt::QueuedConnection);
QThreadPool::globalInstance()->start(task);
}
else
{
qDebug() << "Failed sendindg decks or not yet ;)\nCheck if all players are ready";
}
break;
}
Następnie zawartośc JSONA jest ładowana i wysyłana:
searchClient(gameRooms[RID]->getPlayersSocketInfo().first())->sendAnswer(_doc)
searchClient(gameRooms[RID]->getPlayersSocketInfo().last())->sendAnswer(_doc2)
Tak wygląda wysyłanie:
bool Client::sendAnswer(QJsonDocument &document)
{
QByteArray buffer;
buffer = document.toBinaryData();
ReportClock::getCurrentDateTime();
qDebug() << "Sending answer...\nDescription ID: " << socket->socketDescriptor() << "\nThread: " << QObject::thread() << " " << QThread::currentThreadId();
quint64 result = -1;
result = socket->write(buffer);
qDebug() << "Sending result: " << result;
if(result>0)
{
return true;
}
else
{
return false;
}
}
Pytanie jest następujące: jak wysłać do obu klientów? Na chwilę ustawiłem nawet warunek na true, aby od razu dostał pierwszy klient paczkę, ale to nic nie dało.
UPDATE:
Problem niby rozwiązany - zmniejszyłem ilość wysyłanych danych i problem znikł. Zastanawiam się, czy w takim razie w metodzie readyRead() nie powinienem dodać jakiegoś loopEvent
Aktualnie odebranie danych wygląda następująco:
void Client::readyRead()
{
ReportClock::getCurrentDateTime();
qDebug() << __FUNCTION__;
QJsonDocument _doc;
_doc = QJsonDocument::fromBinaryData(socket->readAll());
qDebug() << "Message:\n" << _doc;
this->setMessage(_doc);
emit messageTrigger();
}