fixed local client/server communication (close client socket)

This commit is contained in:
Luis Ángel San Martín 2013-09-01 21:35:27 +02:00
parent f67a7c25ac
commit 404c551d29
5 changed files with 51 additions and 13 deletions

View File

@ -16,7 +16,10 @@ YACReaderLocalClient::YACReaderLocalClient(QObject *parent) :
/*connect(socket, SIGNAL(error(QLocalSocket::LocalSocketError)), /*connect(socket, SIGNAL(error(QLocalSocket::LocalSocketError)),
this, SLOT(displayError(QLocalSocket::LocalSocketError)));*/ this, SLOT(displayError(QLocalSocket::LocalSocketError)));*/
} }
YACReaderLocalClient::~YACReaderLocalClient()
{
delete localSocket;
}
//información de comic recibida... //información de comic recibida...
void YACReaderLocalClient::readMessage() void YACReaderLocalClient::readMessage()
{ {
@ -47,7 +50,10 @@ bool YACReaderLocalClient::requestComicInfo(quint64 libraryId, ComicDB & comic,
tries++; tries++;
} }
if(tries == 200) if(tries == 200)
{
localSocket->close();
return false; return false;
}
//QByteArray data; //QByteArray data;
tries = 0; tries = 0;
@ -57,7 +63,10 @@ bool YACReaderLocalClient::requestComicInfo(quint64 libraryId, ComicDB & comic,
tries++; tries++;
} }
if(tries == 10) if(tries == 10)
{
localSocket->close();
return false; 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;
@ -70,10 +79,14 @@ bool YACReaderLocalClient::requestComicInfo(quint64 libraryId, ComicDB & comic,
tries++; tries++;
} }
if(tries == 10) if(tries == 10)
{
localSocket->close();
return false; return false;
}
QDataStream dataStream(localSocket->read(totalSize)); QDataStream dataStream(localSocket->read(totalSize));
dataStream >> comic; dataStream >> comic;
dataStream >> siblings; dataStream >> siblings;
localSocket->close();
return true; return true;
} }
else else
@ -102,6 +115,7 @@ bool YACReaderLocalClient::sendComicInfo(quint64 libraryId, ComicDB & comic)
written += localSocket->write(block); written += localSocket->write(block);
tries++; tries++;
} }
localSocket->close();
if(tries == 100 && written != block.size()) if(tries == 100 && written != block.size())
{ {
emit finished(); emit finished();

View File

@ -11,7 +11,7 @@ class YACReaderLocalClient : public QObject
Q_OBJECT Q_OBJECT
public: public:
explicit YACReaderLocalClient(QObject *parent = 0); explicit YACReaderLocalClient(QObject *parent = 0);
~YACReaderLocalClient();
signals: signals:
void finished(); void finished();
public slots: public slots:

View File

@ -53,7 +53,6 @@ int main( int argc, char ** argv )
mw->connect(localServer,SIGNAL(comicUpdated(quint64, const ComicDB &)),mw,SLOT(updateComicsView(quint64, const ComicDB &))); mw->connect(localServer,SIGNAL(comicUpdated(quint64, const ComicDB &)),mw,SLOT(updateComicsView(quint64, const ComicDB &)));
localServer->start();
//connections to localServer //connections to localServer
mw->show(); mw->show();

View File

@ -12,9 +12,9 @@
using namespace YACReader; using namespace YACReader;
QMutex YACReaderClientConnectionWorker::dbMutex; QMutex YACReaderClientConnectionWorker::dbMutex;
//int YACReaderClientConnectionWorker::count = 0;
YACReaderLocalServer::YACReaderLocalServer(QObject *parent) : YACReaderLocalServer::YACReaderLocalServer(QObject *parent) :
QThread(parent) QObject(parent)
{ {
localServer = new QLocalServer(this); localServer = new QLocalServer(this);
if (!localServer->listen(YACREADERLIBRARY_GUID)) { if (!localServer->listen(YACREADERLIBRARY_GUID)) {
@ -29,11 +29,11 @@ bool YACReaderLocalServer::isListening()
return localServer->isListening(); return localServer->isListening();
} }
void YACReaderLocalServer::run() /*void YACReaderLocalServer::run()
{ {
while(1) while(1)
exec(); exec();
} }*/
void YACReaderLocalServer::sendResponse() void YACReaderLocalServer::sendResponse()
{ {
@ -41,9 +41,13 @@ void YACReaderLocalServer::sendResponse()
//connect(clientConnection, SIGNAL(disconnected()),clientConnection, SLOT(deleteLater())); //connect(clientConnection, SIGNAL(disconnected()),clientConnection, SLOT(deleteLater()));
YACReaderClientConnectionWorker * worker = new YACReaderClientConnectionWorker(clientConnection); YACReaderClientConnectionWorker * worker = new YACReaderClientConnectionWorker(clientConnection);
if(worker != 0)
{
clientConnection->moveToThread(worker);
connect(worker,SIGNAL(comicUpdated(quint64, ComicDB)),this,SIGNAL(comicUpdated(quint64, ComicDB))); connect(worker,SIGNAL(comicUpdated(quint64, ComicDB)),this,SIGNAL(comicUpdated(quint64, ComicDB)));
connect(worker,SIGNAL(finished()),worker,SLOT(deleteLater())); connect(worker,SIGNAL(finished()),worker,SLOT(deleteLater()));
worker->start(); worker->start();
}
//clientConnection->waitForBytesWritten();*/ //clientConnection->waitForBytesWritten();*/
//clientConnection->disconnectFromServer(); //clientConnection->disconnectFromServer();
} }
@ -68,9 +72,20 @@ YACReaderClientConnectionWorker::~YACReaderClientConnectionWorker()
{ {
} }
/*#include <QFile>
#include <QTextStream>
#include <QDateTime>*/
void YACReaderClientConnectionWorker::run() void YACReaderClientConnectionWorker::run()
{ {
/*{
QFile f(QString("c:/temp/thread%1.txt").arg(count));
f.open(QIODevice::Append);
QTextStream out(&f);
out << QString("Thread%1 starts").arg(count) << endl;
f.close();
}
uint t1 = QDateTime::currentMSecsSinceEpoch();*/
quint64 libraryId; quint64 libraryId;
ComicDB comic; ComicDB comic;
int tries = 0; int tries = 0;
@ -143,6 +158,15 @@ void YACReaderClientConnectionWorker::run()
clientConnection->waitForDisconnected(); clientConnection->waitForDisconnected();
clientConnection->deleteLater(); clientConnection->deleteLater();
/*count++;
uint t2 = QDateTime::currentMSecsSinceEpoch();
{
QFile f(QString("c:/temp/thread%1.txt").arg(count));
f.open(QIODevice::Append);
QTextStream out(&f);
out << QString("Thread%1 ends : time - %2").arg(count).arg(t2-t1) << endl;
f.close();
}*/
} }
void YACReaderClientConnectionWorker::getComicInfo(quint64 libraryId, ComicDB & comic, QList<ComicDB> & siblings) void YACReaderClientConnectionWorker::getComicInfo(quint64 libraryId, ComicDB & comic, QList<ComicDB> & siblings)

View File

@ -9,7 +9,7 @@ class QLocalServer;
class QLocalSocket; class QLocalSocket;
class ComicDB; class ComicDB;
class YACReaderLocalServer : public QThread class YACReaderLocalServer : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
@ -22,7 +22,7 @@ public slots:
void sendResponse(); void sendResponse();
static bool isRunning(); static bool isRunning();
private: private:
void run(); //void run();
QLocalServer * localServer; QLocalServer * localServer;
}; };
@ -37,6 +37,7 @@ signals:
void comicUpdated(quint64 libraryId, const ComicDB & comic); void comicUpdated(quint64 libraryId, const ComicDB & comic);
private: private:
static QMutex dbMutex; static QMutex dbMutex;
//static int count;
void run(); void run();
void getComicInfo(quint64 libraryId, ComicDB & comic, QList<ComicDB> & sibling); void getComicInfo(quint64 libraryId, ComicDB & comic, QList<ComicDB> & sibling);