From 9b2b9d2b8bdca192c3915fd6fdd5816fd468419a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Sun, 11 Aug 2013 22:20:38 +0200 Subject: [PATCH] Qt 4.8.5 fixed comiccontroller, now ComicFiles are loaded in a background thread (7z.dll) fixed local comunications, no more read/write locks --- YACReader/yacreader_local_client.cpp | 30 ++++++++++++++---- .../server/controllers/comiccontroller.cpp | 11 +++---- YACReaderLibrary/yacreader_local_server.cpp | 31 ++++++++++++++----- generateVS2010Projects.bat | 8 ++--- 4 files changed, 56 insertions(+), 24 deletions(-) diff --git a/YACReader/yacreader_local_client.cpp b/YACReader/yacreader_local_client.cpp index 81494e91..0b3223ac 100644 --- a/YACReader/yacreader_local_client.cpp +++ b/YACReader/yacreader_local_client.cpp @@ -37,24 +37,38 @@ bool YACReaderLocalClient::requestComicInfo(quint64 libraryId, ComicDB & comic, out << (quint16)(block.size() - sizeof(quint16)); int written = 0; - while(written != block.size()) + int tries = 0; + while(written != block.size() && tries < 200) { written += localSocket->write(block); localSocket->flush(); + tries++; } + if(tries == 200) + return false; //QByteArray data; - while(localSocket->bytesAvailable() < sizeof(quint16)) - localSocket->waitForReadyRead(); + tries = 0; + while(localSocket->bytesAvailable() < sizeof(quint16) && tries < 200) + { + localSocket->waitForReadyRead(10); + tries++; + } + if(tries == 200) + return false; QDataStream sizeStream(localSocket->read(sizeof(quint16))); sizeStream.setVersion(QDataStream::Qt_4_8); quint16 totalSize = 0; sizeStream >> totalSize; - while(localSocket->bytesAvailable() < totalSize ) + tries = 0; + while(localSocket->bytesAvailable() < totalSize && tries < 200 ) { - localSocket->waitForReadyRead(); + localSocket->waitForReadyRead(10); + tries++; } + if(tries == 200) + return false; QDataStream dataStream(localSocket->read(totalSize)); dataStream >> comic; dataStream >> siblings; @@ -80,10 +94,14 @@ bool YACReaderLocalClient::sendComicInfo(quint64 libraryId, ComicDB & comic) out << (quint16)(block.size() - sizeof(quint16)); int written = 0; - while(written != block.size()) + int tries = 0; + while(written != block.size() && tries < 100) { written += localSocket->write(block); + tries++; } + if(tries == 100 && written != block.size()) + return false; return true; } else diff --git a/YACReaderLibrary/server/controllers/comiccontroller.cpp b/YACReaderLibrary/server/controllers/comiccontroller.cpp index 52715b28..38d069c8 100644 --- a/YACReaderLibrary/server/controllers/comiccontroller.cpp +++ b/YACReaderLibrary/server/controllers/comiccontroller.cpp @@ -50,16 +50,13 @@ void ComicController::service(HttpRequest& request, HttpResponse& response) if(comicFile != NULL) { QThread * thread = NULL; - if (typeid(*comicFile) != typeid(FileComic)) - { - thread = new QThread(); - comicFile->moveToThread(thread); + thread = new QThread(); - connect(thread, SIGNAL(started()), comicFile, SLOT(process())); - connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater())); + comicFile->moveToThread(thread); - } + connect(thread, SIGNAL(started()), comicFile, SLOT(process())); + connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater())); comicFile->load(libraries.value(libraryName)+comic.path); diff --git a/YACReaderLibrary/yacreader_local_server.cpp b/YACReaderLibrary/yacreader_local_server.cpp index 52e18ca7..05ff43e4 100644 --- a/YACReaderLibrary/yacreader_local_server.cpp +++ b/YACReaderLibrary/yacreader_local_server.cpp @@ -32,19 +32,29 @@ void YACReaderLocalServer::sendResponse() quint64 libraryId; ComicDB comic; + int tries = 0; //QByteArray data; - while(clientConnection->bytesAvailable() < sizeof(quint16)) - clientConnection->waitForReadyRead(); + while(clientConnection->bytesAvailable() < sizeof(quint16) && tries < 200) + { + clientConnection->waitForReadyRead(10); + tries++; + } + if(tries == 200) + return; QDataStream sizeStream(clientConnection->read(sizeof(quint16))); sizeStream.setVersion(QDataStream::Qt_4_8); quint16 totalSize = 0; sizeStream >> totalSize; - while(clientConnection->bytesAvailable() < totalSize ) + tries = 0; + while(clientConnection->bytesAvailable() < totalSize && tries < 200) { - clientConnection->waitForReadyRead(); + clientConnection->waitForReadyRead(10); + tries++; } + if(tries == 200) + return; QDataStream dataStream(clientConnection->read(totalSize)); quint8 msgType; dataStream >> msgType; @@ -68,10 +78,17 @@ void YACReaderLocalServer::sendResponse() out << (quint16)(block.size() - sizeof(quint16)); int written = 0; - while(written != block.size()) + tries = 0; + while(written != block.size() && tries < 200) { - written += clientConnection->write(block); - clientConnection->flush(); + int ret = clientConnection->write(block); + if(ret != -1) + { + written += ret; + clientConnection->flush(); + } + else + tries++; } break; } diff --git a/generateVS2010Projects.bat b/generateVS2010Projects.bat index b815ee74..23f8ce59 100644 --- a/generateVS2010Projects.bat +++ b/generateVS2010Projects.bat @@ -1,10 +1,10 @@ echo Setting up a Qt environment... -set QTDIR=D:\Desarrollo\Qt\4.8.4 -echo -- QTDIR set to D:\Desarrollo\Qt\4.8.4 -set PATH=D:\Desarrollo\Qt\4.8.4\bin;%PATH% -echo -- Added D:\Desarrollo\Qt\4.8.4\bin to PATH +set QTDIR=D:\Desarrollo\Qt\4.8.5 +echo -- QTDIR set to D:\Desarrollo\Qt\4.8.5 +set PATH=D:\Desarrollo\Qt\4.8.5\bin;%PATH% +echo -- Added D:\Desarrollo\Qt\4.8.5\bin to PATH set QMAKESPEC=win32-msvc2010 echo -- QMAKESPEC set to "win32-msvc2010"