fixed YACReaderLibrary <-> YACReader communication when ComicInfo is too large

This commit is contained in:
Luis Ángel San Martín 2013-12-16 22:55:46 +01:00
parent a27490ab83
commit 7e69e94b82
2 changed files with 27 additions and 15 deletions

View File

@ -35,12 +35,12 @@ bool YACReaderLocalClient::requestComicInfo(quint64 libraryId, ComicDB & comic,
QByteArray block; QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly); QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_8); out.setVersion(QDataStream::Qt_4_8);
out << (quint16)0; out << (quint32)0;
out << (quint8)YACReader::RequestComicInfo; out << (quint8)YACReader::RequestComicInfo;
out << libraryId; out << libraryId;
out << comic; out << comic;
out.device()->seek(0); out.device()->seek(0);
out << (quint16)(block.size() - sizeof(quint16)); out << (quint32)(block.size() - sizeof(quint32));
int written = 0; int written = 0;
int tries = 0; int tries = 0;
@ -58,7 +58,7 @@ bool YACReaderLocalClient::requestComicInfo(quint64 libraryId, ComicDB & comic,
//QByteArray data; //QByteArray data;
tries = 0; tries = 0;
while(localSocket->bytesAvailable() < sizeof(quint16) && tries < 10) while(localSocket->bytesAvailable() < sizeof(quint32) && tries < 10)
{ {
localSocket->waitForReadyRead(100); localSocket->waitForReadyRead(100);
tries++; tries++;
@ -68,9 +68,9 @@ bool YACReaderLocalClient::requestComicInfo(quint64 libraryId, ComicDB & comic,
localSocket->close(); localSocket->close();
return false; return false;
} }
QDataStream sizeStream(localSocket->read(sizeof(quint16))); QDataStream sizeStream(localSocket->read(sizeof(quint32)));
sizeStream.setVersion(QDataStream::Qt_4_8); sizeStream.setVersion(QDataStream::Qt_4_8);
quint16 totalSize = 0; quint32 totalSize = 0;
sizeStream >> totalSize; sizeStream >> totalSize;
QByteArray data; QByteArray data;
@ -107,12 +107,12 @@ bool YACReaderLocalClient::sendComicInfo(quint64 libraryId, ComicDB & comic)
QByteArray block; QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly); QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_8); out.setVersion(QDataStream::Qt_4_8);
out << (quint16)0; out << (quint32)0;
out << (quint8)YACReader::SendComicInfo; out << (quint8)YACReader::SendComicInfo;
out << libraryId; out << libraryId;
out << comic; out << comic;
out.device()->seek(0); out.device()->seek(0);
out << (quint16)(block.size() - sizeof(quint16)); out << (quint32)(block.size() - sizeof(quint32));
int written = 0; int written = 0;
int tries = 0; int tries = 0;

View File

@ -52,6 +52,8 @@ void YACReaderLocalServer::sendResponse()
connect(worker,SIGNAL(finished()),worker,SLOT(deleteLater())); connect(worker,SIGNAL(finished()),worker,SLOT(deleteLater()));
worker->start(); worker->start();
} }
QLOG_INFO() << "connection incoming";
//clientConnection->waitForBytesWritten();*/ //clientConnection->waitForBytesWritten();*/
//clientConnection->disconnectFromServer(); //clientConnection->disconnectFromServer();
} }
@ -94,27 +96,37 @@ void YACReaderClientConnectionWorker::run()
ComicDB comic; ComicDB comic;
int tries = 0; int tries = 0;
//QByteArray data; //QByteArray data;
while(clientConnection->bytesAvailable() < sizeof(quint16) && tries < 200) while(clientConnection->bytesAvailable() < sizeof(quint32) && tries < 200)
{ {
clientConnection->waitForReadyRead(10); clientConnection->waitForReadyRead(10);
tries++; tries++;
} }
if(tries == 200) if(tries == 200)
{
QLOG_ERROR() << "unable to read the message size";
return; return;
QDataStream sizeStream(clientConnection->read(sizeof(quint16))); }
QDataStream sizeStream(clientConnection->read(sizeof(quint32)));
sizeStream.setVersion(QDataStream::Qt_4_8); sizeStream.setVersion(QDataStream::Qt_4_8);
quint16 totalSize = 0; quint32 totalSize = 0;
sizeStream >> totalSize; sizeStream >> totalSize;
tries = 0; tries = 0;
while(clientConnection->bytesAvailable() < totalSize && tries < 200) QByteArray data;
while(data.size() < totalSize && tries < 200)
{ {
clientConnection->waitForReadyRead(10); data.append(clientConnection->readAll());
if(data.length() < totalSize)
clientConnection->waitForReadyRead(100);
tries++; tries++;
} }
if(tries == 200) if(tries == 200)
{
QLOG_ERROR() << "unable to read message";
return; return;
QDataStream dataStream(clientConnection->read(totalSize)); }
QDataStream dataStream(data);
quint8 msgType; quint8 msgType;
dataStream >> msgType; dataStream >> msgType;
dataStream >> libraryId; dataStream >> libraryId;
@ -130,11 +142,11 @@ void YACReaderClientConnectionWorker::run()
QByteArray block; QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly); QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_8); out.setVersion(QDataStream::Qt_4_8);
out << (quint16)0; out << (quint32)0;
out << comic; out << comic;
out << siblings; out << siblings;
out.device()->seek(0); out.device()->seek(0);
out << (quint16)(block.size() - sizeof(quint16)); out << (quint32)(block.size() - sizeof(quint32));
int written = 0; int written = 0;
tries = 0; tries = 0;