From 404c551d29a8aa78f3c6c14d906319791c80d2ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Sun, 1 Sep 2013 21:35:27 +0200 Subject: [PATCH] fixed local client/server communication (close client socket) --- YACReader/yacreader_local_client.cpp | 16 ++++++++- YACReader/yacreader_local_client.h | 2 +- YACReaderLibrary/main.cpp | 1 - YACReaderLibrary/yacreader_local_server.cpp | 40 ++++++++++++++++----- YACReaderLibrary/yacreader_local_server.h | 5 +-- 5 files changed, 51 insertions(+), 13 deletions(-) diff --git a/YACReader/yacreader_local_client.cpp b/YACReader/yacreader_local_client.cpp index 5f966d7e..108577b3 100644 --- a/YACReader/yacreader_local_client.cpp +++ b/YACReader/yacreader_local_client.cpp @@ -16,7 +16,10 @@ YACReaderLocalClient::YACReaderLocalClient(QObject *parent) : /*connect(socket, SIGNAL(error(QLocalSocket::LocalSocketError)), this, SLOT(displayError(QLocalSocket::LocalSocketError)));*/ } - +YACReaderLocalClient::~YACReaderLocalClient() +{ + delete localSocket; +} //información de comic recibida... void YACReaderLocalClient::readMessage() { @@ -47,7 +50,10 @@ bool YACReaderLocalClient::requestComicInfo(quint64 libraryId, ComicDB & comic, tries++; } if(tries == 200) + { + localSocket->close(); return false; + } //QByteArray data; tries = 0; @@ -57,7 +63,10 @@ bool YACReaderLocalClient::requestComicInfo(quint64 libraryId, ComicDB & comic, tries++; } if(tries == 10) + { + localSocket->close(); return false; + } QDataStream sizeStream(localSocket->read(sizeof(quint16))); sizeStream.setVersion(QDataStream::Qt_4_8); quint16 totalSize = 0; @@ -70,10 +79,14 @@ bool YACReaderLocalClient::requestComicInfo(quint64 libraryId, ComicDB & comic, tries++; } if(tries == 10) + { + localSocket->close(); return false; + } QDataStream dataStream(localSocket->read(totalSize)); dataStream >> comic; dataStream >> siblings; + localSocket->close(); return true; } else @@ -102,6 +115,7 @@ bool YACReaderLocalClient::sendComicInfo(quint64 libraryId, ComicDB & comic) written += localSocket->write(block); tries++; } + localSocket->close(); if(tries == 100 && written != block.size()) { emit finished(); diff --git a/YACReader/yacreader_local_client.h b/YACReader/yacreader_local_client.h index 0c4e5d88..001cb1e7 100644 --- a/YACReader/yacreader_local_client.h +++ b/YACReader/yacreader_local_client.h @@ -11,7 +11,7 @@ class YACReaderLocalClient : public QObject Q_OBJECT public: explicit YACReaderLocalClient(QObject *parent = 0); - + ~YACReaderLocalClient(); signals: void finished(); public slots: diff --git a/YACReaderLibrary/main.cpp b/YACReaderLibrary/main.cpp index 70bdccf4..c3135756 100644 --- a/YACReaderLibrary/main.cpp +++ b/YACReaderLibrary/main.cpp @@ -53,7 +53,6 @@ int main( int argc, char ** argv ) mw->connect(localServer,SIGNAL(comicUpdated(quint64, const ComicDB &)),mw,SLOT(updateComicsView(quint64, const ComicDB &))); - localServer->start(); //connections to localServer mw->show(); diff --git a/YACReaderLibrary/yacreader_local_server.cpp b/YACReaderLibrary/yacreader_local_server.cpp index 9ce31f54..5e392312 100644 --- a/YACReaderLibrary/yacreader_local_server.cpp +++ b/YACReaderLibrary/yacreader_local_server.cpp @@ -12,9 +12,9 @@ using namespace YACReader; QMutex YACReaderClientConnectionWorker::dbMutex; - +//int YACReaderClientConnectionWorker::count = 0; YACReaderLocalServer::YACReaderLocalServer(QObject *parent) : - QThread(parent) + QObject(parent) { localServer = new QLocalServer(this); if (!localServer->listen(YACREADERLIBRARY_GUID)) { @@ -29,11 +29,11 @@ bool YACReaderLocalServer::isListening() return localServer->isListening(); } -void YACReaderLocalServer::run() +/*void YACReaderLocalServer::run() { while(1) exec(); -} +}*/ void YACReaderLocalServer::sendResponse() { @@ -41,9 +41,13 @@ void YACReaderLocalServer::sendResponse() //connect(clientConnection, SIGNAL(disconnected()),clientConnection, SLOT(deleteLater())); 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(); + if(worker != 0) + { + clientConnection->moveToThread(worker); + connect(worker,SIGNAL(comicUpdated(quint64, ComicDB)),this,SIGNAL(comicUpdated(quint64, ComicDB))); + connect(worker,SIGNAL(finished()),worker,SLOT(deleteLater())); + worker->start(); + } //clientConnection->waitForBytesWritten();*/ //clientConnection->disconnectFromServer(); } @@ -68,9 +72,20 @@ YACReaderClientConnectionWorker::~YACReaderClientConnectionWorker() { } - +/*#include +#include +#include */ 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; ComicDB comic; int tries = 0; @@ -143,6 +158,15 @@ void YACReaderClientConnectionWorker::run() clientConnection->waitForDisconnected(); 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 & siblings) diff --git a/YACReaderLibrary/yacreader_local_server.h b/YACReaderLibrary/yacreader_local_server.h index 34b59ccf..d6c8832b 100644 --- a/YACReaderLibrary/yacreader_local_server.h +++ b/YACReaderLibrary/yacreader_local_server.h @@ -9,7 +9,7 @@ class QLocalServer; class QLocalSocket; class ComicDB; -class YACReaderLocalServer : public QThread +class YACReaderLocalServer : public QObject { Q_OBJECT public: @@ -22,7 +22,7 @@ public slots: void sendResponse(); static bool isRunning(); private: - void run(); + //void run(); QLocalServer * localServer; }; @@ -37,6 +37,7 @@ signals: void comicUpdated(quint64 libraryId, const ComicDB & comic); private: static QMutex dbMutex; + //static int count; void run(); void getComicInfo(quint64 libraryId, ComicDB & comic, QList & sibling);