some bugs fixed in local server/client communication

This commit is contained in:
Luis Ángel San Martín 2013-08-24 20:13:38 +02:00
parent 8ae63e562a
commit b684b580ed
7 changed files with 95 additions and 81 deletions

View File

@ -204,7 +204,7 @@ void MainWindowViewer::openFromArgv()
}
else if(QCoreApplication::argc() == 4)
{
isClient = true;
QString pathFile = QCoreApplication::arguments().at(1);
currentDirectory = pathFile;
quint64 comicId = QCoreApplication::arguments().at(2).toULongLong();
@ -217,10 +217,11 @@ void MainWindowViewer::openFromArgv()
if(client.requestComicInfo(libraryId,currentComicDB,siblingComics))
{
isClient = true;
open(pathFile+currentComicDB.path,currentComicDB,siblingComics);
}
else
{/*error*/}
{isClient = false;/*error*/}
optionsDialog->setFilters(currentComicDB.info.brightness, currentComicDB.info.contrast, currentComicDB.info.gamma);
}

View File

@ -854,6 +854,8 @@ int Viewer::getCurrentPageNumber()
void Viewer::updateComic(ComicDB & comic)
{
if(render->hasLoadedComic())
{
//set currentPage
comic.info.currentPage = render->getIndex()+1;
//set bookmarks
@ -879,6 +881,7 @@ void Viewer::updateComic(ComicDB & comic)
comic.info.contrast = contrast;
if(gamma != 100 || comic.info.gamma!=-1)
comic.info.gamma = gamma;
}
}

View File

@ -51,12 +51,12 @@ bool YACReaderLocalClient::requestComicInfo(quint64 libraryId, ComicDB & comic,
//QByteArray data;
tries = 0;
while(localSocket->bytesAvailable() < sizeof(quint16) && tries < 200)
while(localSocket->bytesAvailable() < sizeof(quint16) && tries < 10)
{
localSocket->waitForReadyRead(10);
localSocket->waitForReadyRead(100);
tries++;
}
if(tries == 200)
if(tries == 20)
return false;
QDataStream sizeStream(localSocket->read(sizeof(quint16)));
sizeStream.setVersion(QDataStream::Qt_4_8);
@ -64,12 +64,12 @@ bool YACReaderLocalClient::requestComicInfo(quint64 libraryId, ComicDB & comic,
sizeStream >> totalSize;
tries = 0;
while(localSocket->bytesAvailable() < totalSize && tries < 200 )
while(localSocket->bytesAvailable() < totalSize && tries < 10 )
{
localSocket->waitForReadyRead(10);
localSocket->waitForReadyRead(100);
tries++;
}
if(tries == 200)
if(tries == 20)
return false;
QDataStream dataStream(localSocket->read(totalSize));
dataStream >> comic;

View File

@ -398,6 +398,7 @@ QList<LibraryItem *> DBHelper::getFoldersFromParent(qulonglong parentId, QSqlDat
return list;
}
//TODO sort using natural sorting and issue number
QList<ComicDB> DBHelper::getSortedComicsFromParent(qulonglong parentId, QSqlDatabase & db)
{

View File

@ -29,6 +29,8 @@ int main( int argc, char ** argv )
app.installTranslator(&viewerTranslator);
app.setApplicationName("YACReaderLibrary");
qRegisterMetaType<ComicDB>("ComicDB");
#ifdef SERVER_RELEASE
QSettings * settings = new QSettings(QCoreApplication::applicationDirPath()+"/YACReaderLibrary.ini",QSettings::IniFormat); //TODO unificar la creación del fichero de config con el servidor
settings->beginGroup("libraryConfig");

View File

@ -2,6 +2,7 @@
#include <QLocalServer>
#include <QLocalSocket>
#include <QPointer>
#include "yacreader_global.h"
#include "db_helper.h"
@ -28,17 +29,15 @@ bool YACReaderLocalServer::isListening()
void YACReaderLocalServer::sendResponse()
{
QLocalSocket *clientConnection = localServer->nextPendingConnection();
connect(clientConnection, SIGNAL(disconnected()),
clientConnection, SLOT(deleteLater()));
QLocalSocket *clientConnection = localServer->nextPendingConnection();
//connect(clientConnection, SIGNAL(disconnected()),clientConnection, SLOT(deleteLater()));
qRegisterMetaType<ComicDB>("ComicDB");
YACReaderClientConnectionWorker * worker = new YACReaderClientConnectionWorker(clientConnection);
connect(worker,SIGNAL(comicUpdated(quint64, ComicDB)),this,SIGNAL(comicUpdated(quint64, ComicDB)));
connect(worker,SIGNAL(finished()),worker,SLOT(deleteLater()));
worker->start();
//clientConnection->waitForBytesWritten();*/
//clientConnection->disconnectFromServer();
YACReaderClientConnectionWorker * worker = new YACReaderClientConnectionWorker(clientConnection);
connect(worker,SIGNAL(comicUpdated(quint64, ComicDB)),this,SIGNAL(comicUpdated(quint64, ComicDB)));
connect(worker,SIGNAL(finished()),worker,SLOT(deleteLater()));
worker->start();
//clientConnection->waitForBytesWritten();*/
//clientConnection->disconnectFromServer();
}
bool YACReaderLocalServer::isRunning()
@ -57,78 +56,85 @@ YACReaderClientConnectionWorker::YACReaderClientConnectionWorker( QLocalSocket *
}
YACReaderClientConnectionWorker::~YACReaderClientConnectionWorker()
{
}
void YACReaderClientConnectionWorker::run()
{
quint64 libraryId;
ComicDB comic;
int tries = 0;
quint64 libraryId;
ComicDB comic;
int tries = 0;
//QByteArray data;
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;
//QByteArray data;
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;
tries = 0;
while(clientConnection->bytesAvailable() < totalSize && tries < 200)
{
clientConnection->waitForReadyRead(10);
tries++;
}
if(tries == 200)
return;
QDataStream dataStream(clientConnection->read(totalSize));
quint8 msgType;
dataStream >> msgType;
dataStream >> libraryId;
dataStream >> comic;
tries = 0;
while(clientConnection->bytesAvailable() < totalSize && tries < 200)
{
clientConnection->waitForReadyRead(10);
tries++;
}
if(tries == 200)
return;
QDataStream dataStream(clientConnection->read(totalSize));
quint8 msgType;
dataStream >> msgType;
dataStream >> libraryId;
dataStream >> comic;
switch (msgType)
{
case YACReader::RequestComicInfo:
{
QList<ComicDB> siblings;
getComicInfo(libraryId,comic,siblings);
switch (msgType)
{
case YACReader::RequestComicInfo:
{
QList<ComicDB> siblings;
getComicInfo(libraryId,comic,siblings);
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_8);
out << (quint16)0;
out << comic;
out << siblings;
out.device()->seek(0);
out << (quint16)(block.size() - sizeof(quint16));
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_8);
out << (quint16)0;
out << comic;
out << siblings;
out.device()->seek(0);
out << (quint16)(block.size() - sizeof(quint16));
int written = 0;
tries = 0;
while(written != block.size() && tries < 200)
{
int ret = clientConnection->write(block);
if(ret != -1)
{
int written = 0;
tries = 0;
while(written != block.size() && tries < 200)
{
int ret = clientConnection->write(block);
if(ret != -1)
{
written += ret;
clientConnection->flush();
}
else
tries++;
}
break;
}
case YACReader::SendComicInfo:
{
updateComic(libraryId,comic);
//clientConnection->disconnectFromServer();
break;
}
}
else
tries++;
}
break;
}
case YACReader::SendComicInfo:
{
updateComic(libraryId,comic);
//clientConnection->disconnectFromServer();
break;
}
}
}
clientConnection->waitForDisconnected();
clientConnection->deleteLater();
}
void YACReaderClientConnectionWorker::getComicInfo(quint64 libraryId, ComicDB & comic, QList<ComicDB> & siblings)

View File

@ -30,6 +30,7 @@ class YACReaderClientConnectionWorker : public QThread
Q_OBJECT
public:
YACReaderClientConnectionWorker( QLocalSocket *clientConnection);
~YACReaderClientConnectionWorker();
signals:
void comicUpdated(quint64 libraryId, const ComicDB & comic);
private: