kitchensync
clientmanager.cpp00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <qobject.h>
00023 #include <qapplication.h>
00024 #include <qthread.h>
00025
00026 #include <error.h>
00027 #include <progress.h>
00028
00029 #include "clientthread.h"
00030 #include "clientmanager.h"
00031
00032 using namespace Threaded;
00033
00037 ClientManager::ClientManager( QObject* parent, const char* name )
00038 : QObject( parent, name ), mWorker( this )
00039 {
00040 mWorker.mLock.lock();
00041 start();
00042 }
00043
00047 ClientManager::~ClientManager()
00048 {
00049
00050 if ( !finished() ) {
00051
00052 terminateThread();
00053
00054 if ( !wait( 5000 ) ) {
00055
00056 terminate();
00057 wait();
00058 }
00059 }
00060 }
00061
00066 void ClientManager::run()
00067 {
00068
00069 mWorker.run();
00070 }
00071
00077 bool ClientManager::isIdle()
00078 {
00079 return !mWorker.mLock.locked();
00080 }
00081
00088 bool ClientManager::readSyncees()
00089 {
00090 if ( mWorker.mLock.tryLock() ) {
00091 mWorker.mFilename = QString::null;
00092 mWorker.mCommand = ClientThread::ReadSyncees;
00093 mWorker.mLock.unlock();
00094 mWorker.mWait.wakeOne();
00095 return true;
00096 } else
00097 return false;
00098 }
00099
00106 bool ClientManager::writeSyncees()
00107 {
00108 if ( mWorker.mLock.tryLock() ) {
00109 mWorker.mFilename = QString::null;
00110 mWorker.mCommand = ClientThread::WriteSyncees;
00111 mWorker.mLock.unlock();
00112 mWorker.mWait.wakeOne();
00113 return true;
00114 } else
00115 return false;
00116 }
00117
00125 bool ClientManager::connectDevice()
00126 {
00127 if ( mWorker.mLock.tryLock() ) {
00128 mWorker.mFilename = QString::null;
00129 mWorker.mCommand = ClientThread::Connect;
00130 mWorker.mLock.unlock();
00131 mWorker.mWait.wakeOne();
00132 return true;
00133 } else
00134 return false;
00135 }
00136
00144 bool ClientManager::disconnectDevice()
00145 {
00146 if ( mWorker.mLock.tryLock() ) {
00147 mWorker.mFilename = QString::null;
00148 mWorker.mCommand = ClientThread::Disconnect;
00149 mWorker.mLock.unlock();
00150 mWorker.mWait.wakeOne();
00151 return true;
00152 } else
00153 return false;
00154 }
00155
00159 bool ClientManager::terminateThread()
00160 {
00161 mWorker.mCancel = true;
00162 if ( mWorker.mLock.tryLock() ) {
00163 mWorker.mFilename = QString::null;
00164 mWorker.mCommand = ClientThread::TerminateThread;
00165 mWorker.mLock.unlock();
00166 mWorker.mWait.wakeOne();
00167 return true;
00168 } else
00169 return false;
00170 }
00171
00176 void ClientManager::cancelJob()
00177 {
00178 mWorker.mCancel = true;
00179 }
00180
00184 void ClientManager::customEvent( QCustomEvent* ce )
00185 {
00186 if ( ce->type() == QEvent::Type( ClientThread::ProgressEvent ) ) {
00187
00188
00189
00190 KSync::Progress* p = static_cast<KSync::Progress *>( ce->data() );
00191 if ( p )
00192 emit signalProgress( *p );
00193 else
00194 emit signalError( KSync::Error( "Internal error" ) );
00195
00196 } else if ( ce->type() == QEvent::Type( ClientThread::ErrorEvent ) ) {
00197
00198
00199 KSync::Error* e = static_cast<KSync::Error *>( ce->data() );
00200 if ( e )
00201 emit signalError( *e );
00202 else
00203 emit signalError( KSync::Error( "Internal error" ) );
00204
00205 } else if ( ce->type() == QEvent::Type( ClientThread::FinishedEvent ) ) {
00206 emit signalFinished();
00207
00208 } else if ( ce->type() == QEvent::Type( ClientThread::TerminatedEvent ) ) {
00209
00210 wait();
00211
00212 emit signalTerminated();
00213 mWorker.mLock.unlock();
00214 }
00215 }
00216 #include "clientmanager.moc"
|