fixed comiccontroller, now ComicFiles are loaded in a background thread (7z.dll)

fixed local comunications, no more read/write locks
This commit is contained in:
Luis Ángel San Martín 2013-08-11 22:20:38 +02:00
parent 19fcc5b826
commit 9b2b9d2b8b
4 changed files with 56 additions and 24 deletions

View File

@ -37,24 +37,38 @@ bool YACReaderLocalClient::requestComicInfo(quint64 libraryId, ComicDB & comic,
out << (quint16)(block.size() - sizeof(quint16)); out << (quint16)(block.size() - sizeof(quint16));
int written = 0; int written = 0;
while(written != block.size()) int tries = 0;
while(written != block.size() && tries < 200)
{ {
written += localSocket->write(block); written += localSocket->write(block);
localSocket->flush(); localSocket->flush();
tries++;
} }
if(tries == 200)
return false;
//QByteArray data; //QByteArray data;
while(localSocket->bytesAvailable() < sizeof(quint16)) tries = 0;
localSocket->waitForReadyRead(); while(localSocket->bytesAvailable() < sizeof(quint16) && tries < 200)
{
localSocket->waitForReadyRead(10);
tries++;
}
if(tries == 200)
return false;
QDataStream sizeStream(localSocket->read(sizeof(quint16))); QDataStream sizeStream(localSocket->read(sizeof(quint16)));
sizeStream.setVersion(QDataStream::Qt_4_8); sizeStream.setVersion(QDataStream::Qt_4_8);
quint16 totalSize = 0; quint16 totalSize = 0;
sizeStream >> totalSize; 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)); QDataStream dataStream(localSocket->read(totalSize));
dataStream >> comic; dataStream >> comic;
dataStream >> siblings; dataStream >> siblings;
@ -80,10 +94,14 @@ bool YACReaderLocalClient::sendComicInfo(quint64 libraryId, ComicDB & comic)
out << (quint16)(block.size() - sizeof(quint16)); out << (quint16)(block.size() - sizeof(quint16));
int written = 0; int written = 0;
while(written != block.size()) int tries = 0;
while(written != block.size() && tries < 100)
{ {
written += localSocket->write(block); written += localSocket->write(block);
tries++;
} }
if(tries == 100 && written != block.size())
return false;
return true; return true;
} }
else else

View File

@ -50,8 +50,7 @@ void ComicController::service(HttpRequest& request, HttpResponse& response)
if(comicFile != NULL) if(comicFile != NULL)
{ {
QThread * thread = NULL; QThread * thread = NULL;
if (typeid(*comicFile) != typeid(FileComic))
{
thread = new QThread(); thread = new QThread();
comicFile->moveToThread(thread); comicFile->moveToThread(thread);
@ -59,8 +58,6 @@ void ComicController::service(HttpRequest& request, HttpResponse& response)
connect(thread, SIGNAL(started()), comicFile, SLOT(process())); connect(thread, SIGNAL(started()), comicFile, SLOT(process()));
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater())); connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
}
comicFile->load(libraries.value(libraryName)+comic.path); comicFile->load(libraries.value(libraryName)+comic.path);
if(thread != NULL) if(thread != NULL)

View File

@ -32,19 +32,29 @@ void YACReaderLocalServer::sendResponse()
quint64 libraryId; quint64 libraryId;
ComicDB comic; ComicDB comic;
int tries = 0;
//QByteArray data; //QByteArray data;
while(clientConnection->bytesAvailable() < sizeof(quint16)) while(clientConnection->bytesAvailable() < sizeof(quint16) && tries < 200)
clientConnection->waitForReadyRead(); {
clientConnection->waitForReadyRead(10);
tries++;
}
if(tries == 200)
return;
QDataStream sizeStream(clientConnection->read(sizeof(quint16))); QDataStream sizeStream(clientConnection->read(sizeof(quint16)));
sizeStream.setVersion(QDataStream::Qt_4_8); sizeStream.setVersion(QDataStream::Qt_4_8);
quint16 totalSize = 0; quint16 totalSize = 0;
sizeStream >> totalSize; 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)); QDataStream dataStream(clientConnection->read(totalSize));
quint8 msgType; quint8 msgType;
dataStream >> msgType; dataStream >> msgType;
@ -68,11 +78,18 @@ void YACReaderLocalServer::sendResponse()
out << (quint16)(block.size() - sizeof(quint16)); out << (quint16)(block.size() - sizeof(quint16));
int written = 0; int written = 0;
while(written != block.size()) tries = 0;
while(written != block.size() && tries < 200)
{ {
written += clientConnection->write(block); int ret = clientConnection->write(block);
if(ret != -1)
{
written += ret;
clientConnection->flush(); clientConnection->flush();
} }
else
tries++;
}
break; break;
} }
case YACReaderIPCMessages::SendComicInfo: case YACReaderIPCMessages::SendComicInfo:

View File

@ -1,10 +1,10 @@
echo Setting up a Qt environment... echo Setting up a Qt environment...
set QTDIR=D:\Desarrollo\Qt\4.8.4 set QTDIR=D:\Desarrollo\Qt\4.8.5
echo -- QTDIR set to D:\Desarrollo\Qt\4.8.4 echo -- QTDIR set to D:\Desarrollo\Qt\4.8.5
set PATH=D:\Desarrollo\Qt\4.8.4\bin;%PATH% set PATH=D:\Desarrollo\Qt\4.8.5\bin;%PATH%
echo -- Added D:\Desarrollo\Qt\4.8.4\bin to PATH echo -- Added D:\Desarrollo\Qt\4.8.5\bin to PATH
set QMAKESPEC=win32-msvc2010 set QMAKESPEC=win32-msvc2010
echo -- QMAKESPEC set to "win32-msvc2010" echo -- QMAKESPEC set to "win32-msvc2010"