Files
RRJServer/DOCS/Отправка.md
2025-09-25 11:47:42 +03:00

76 lines
2.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Отправка сообщений QT сервер:
Отправка маленьких XML пакетов без информации о размере. TYPE_XMLANSWER
```
void SendSystem::sendXmlAnswer(QByteArray array, PacketType packetType)
{
qDebug() << "SendSystemThread: " << QThread::currentThreadId();
Logger::instance().log("C: " + client->getLogin() + " send pack " + enumToString(packetType) +
" " + QString::fromUtf8(array),LogLevel::DEBUG);
if (client->getClientType() == TypeClientAutorization::TYPE_QT_CLIENT ||
client->getClientType() == TypeClientAutorization::TYPE_GUI)
{
// для QT
QDataStream stream(socket);
stream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
stream << packetType;
stream << array;
socket->waitForBytesWritten();
}
else
{ // для Unity
sendPacketType(packetType);
QByteArray message;
int size = array.length();
message.append(reinterpret_cast<char*>(&size), sizeof(int));
socket->write(message);
socket->write(array);
}
}
```
Отправка пакета без вложения:
`void SendSystem::sendPacketType(PacketType packetType){
if (client->getClientType() == TypeClientAutorization::TYPE_QT_CLIENT ||
client->getClientType() == TypeClientAutorization::TYPE_GUI)
{
//Для QT
QDataStream stream(socket);
stream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
stream << packetType;
socket->waitForReadyRead(100);
}
else
{
//для Unity
QByteArray message;
int type = (int)packetType;
message.append(reinterpret_cast<char*>(&type), sizeof(int));
socket->write(message);
}
}`
Не подходит для последнего сообщения (например при отключении клиента)
Отправка сервисного сообщения (тип ServerNotify)
`void SendSystem::sendNotify(QString notify)
{
qDebug() << "SendNotify thread: " << QThread::currentThreadId();
auto answer = emit sigSendNotify(notify);
sendXmlAnswer(answer);
}`
Типы сообщений QT->Unity:
TYPE_XMLANSWER
Остальные QT->QT
Сообщение порядок приема данных QDataStream:
1. размер сообщения(отсылается неявно)
2. само сообщение в бинарном формате(в нашем случае XML)
UNITY: при переходе на новую систему общения пакетами нужно:
отправлять пакет о типе XML ответа при каждой отправке