Отправка сообщений 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(&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(&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 ответа при каждой отправке