diff options
Diffstat (limited to 'src/client.cc')
-rw-r--r-- | src/client.cc | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/client.cc b/src/client.cc index 4d1bb7f..91f16d3 100644 --- a/src/client.cc +++ b/src/client.cc @@ -28,16 +28,28 @@ bool Client::connectToHost(const QString& host) return true; } -bool Client::writeData(const QByteArray& data) +bool Client::writeData(const QString& title, const QByteArray& data) { if(socket->state() != QAbstractSocket::ConnectedState) { return false; } - std::uint32_t size = data.size(); - socket->write((char*)&size, sizeof(std::uint32_t)); + auto title_data = title.toUtf8(); + std::uint32_t title_size = title_data.size(); + std::uint32_t data_size = data.size(); + + // firt write size of the entire payload (without the payload size) + std::uint32_t payload_size = data_size + title_size + sizeof(std::uint32_t); + socket->write((char*)&payload_size, sizeof(std::uint32_t)); + + // then write title size and title + socket->write((char*)&title_size, sizeof(std::uint32_t)); + socket->write(title_data); + + // finally write the rest of the payload socket->write(data); + return socket->waitForBytesWritten(100); // wait at most 100ms } @@ -77,5 +89,5 @@ void Client::timeout() void Client::retryConnect() { - socket->connectToHost(host, 1024); + socket->connectToHost(host, 10024); } |