mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer.git
synced 2026-03-27 19:45:43 +03:00
76 lines
2.7 KiB
Markdown
76 lines
2.7 KiB
Markdown
Отправка сообщений 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 ответа при каждой отправке
|
||
|