• Skip to content
  • Skip to link menu
KDE 3.5 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

kio

scheduler.h

Go to the documentation of this file.
00001 // -*- c++ -*-
00002 /* This file is part of the KDE libraries
00003     Copyright (C) 2000 Stephan Kulow <coolo@kde.org>
00004                        Waldo Bastian <bastian@kde.org>
00005 
00006     This library is free software; you can redistribute it and/or
00007     modify it under the terms of the GNU Library General Public
00008     License as published by the Free Software Foundation; either
00009     version 2 of the License, or (at your option) any later version.
00010 
00011     This library is distributed in the hope that it will be useful,
00012     but WITHOUT ANY WARRANTY; without even the implied warranty of
00013     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014     Library General Public License for more details.
00015 
00016     You should have received a copy of the GNU Library General Public License
00017     along with this library; see the file COPYING.LIB.  If not, write to
00018     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00019     Boston, MA 02110-1301, USA.
00020 */
00021 
00022 #ifndef _kio_scheduler_h
00023 #define _kio_scheduler_h
00024 
00025 #include "kio/job.h"
00026 #include "kio/jobclasses.h"
00027 #include <qtimer.h>
00028 #include <qptrdict.h>
00029 #include <qmap.h>
00030 
00031 #include <dcopobject.h>
00032 
00033 namespace KIO {
00034 
00035     class Slave;
00036     class SlaveList;
00037     class SlaveConfig;
00038     class SessionData;
00039 
00111     class KIO_EXPORT Scheduler : public QObject, virtual public DCOPObject {
00112         Q_OBJECT
00113 
00114     public:
00115         typedef QPtrList<SimpleJob> JobList;
00116 
00117         // InfoDict needs Info, so we can't declare it private
00118         class ProtocolInfo;
00119         class JobData;
00120 
00121         ~Scheduler();
00122 
00129         static void doJob(SimpleJob *job)
00130         { self()->_doJob(job); }
00131 
00138         static void scheduleJob(SimpleJob *job)
00139         { self()->_scheduleJob(job); }
00140 
00145         static void cancelJob(SimpleJob *job)
00146         { self()->_cancelJob(job); }
00147 
00153         static void jobFinished(KIO::SimpleJob *job, KIO::Slave *slave)
00154         { self()->_jobFinished(job, slave); }
00155 
00167         static void putSlaveOnHold(KIO::SimpleJob *job, const KURL &url)
00168         { self()->_putSlaveOnHold(job, url); }
00169 
00174         static void removeSlaveOnHold()
00175         { self()->_removeSlaveOnHold(); }
00176 
00182         static void publishSlaveOnHold()
00183         { self()->_publishSlaveOnHold(); }
00184 
00196         static KIO::Slave *getConnectedSlave(const KURL &url, const KIO::MetaData &config = MetaData() )
00197         { return self()->_getConnectedSlave(url, config); }
00198 
00199         /*
00200          * Uses @p slave to do @p job.
00201          * This function should be called immediately after creating a Job.
00202          *
00203          * @param slave The slave to use. The slave must have been obtained
00204          *              with a call to getConnectedSlave and must not
00205          *              be currently assigned to any other job.
00206          * @param job The job to do.
00207          *
00208          * @return true is successful, false otherwise.
00209          *
00210          * @see getConnectedSlave()
00211          * @see disconnectSlave()
00212          * @see slaveConnected()
00213          * @see slaveError()
00214          */
00215         static bool assignJobToSlave(KIO::Slave *slave, KIO::SimpleJob *job)
00216         { return self()->_assignJobToSlave(slave, job); }
00217 
00218         /*
00219          * Disconnects @p slave.
00220          *
00221          * @param slave The slave to disconnect. The slave must have been
00222          *              obtained with a call to getConnectedSlave
00223          *              and must not be assigned to any job.
00224          *
00225          * @return true is successful, false otherwise.
00226          *
00227          * @see getConnectedSlave
00228          * @see assignJobToSlave
00229          */
00230         static bool disconnectSlave(KIO::Slave *slave)
00231         { return self()->_disconnectSlave(slave); }
00232 
00243         static void registerWindow(QWidget *wid)
00244         { self()->_registerWindow(wid); }
00245         
00250         static void unregisterWindow(QObject *wid)
00251         { self()->slotUnregisterWindow(wid); }
00252 
00259         static bool connect( const char *signal, const QObject *receiver,
00260                              const char *member)
00261         { return QObject::connect(self(), signal, receiver, member); }
00262 
00263         static bool connect( const QObject* sender, const char* signal,
00264                              const QObject* receiver, const char* member )
00265         { return QObject::connect(sender, signal, receiver, member); }
00266 
00267         static bool disconnect( const QObject* sender, const char* signal,
00268                                 const QObject* receiver, const char* member )
00269         { return QObject::disconnect(sender, signal, receiver, member); }
00270 
00271         bool connect( const QObject *sender, const char *signal,
00272                       const char *member )
00273         { return QObject::connect(sender, signal, member); }
00274 
00280         static void checkSlaveOnHold(bool b) { self()->_checkSlaveOnHold(b); }
00281 
00282         void debug_info();
00283 
00284         virtual bool process(const QCString &fun, const QByteArray &data,
00285                              QCString& replyType, QByteArray &replyData);
00286 
00287         virtual QCStringList functions();
00288 
00289     public slots:
00290         void slotSlaveDied(KIO::Slave *slave);
00291         void slotSlaveStatus(pid_t pid, const QCString &protocol,
00292                              const QString &host, bool connected);
00293     signals:
00294         void slaveConnected(KIO::Slave *slave);
00295         void slaveError(KIO::Slave *slave, int error, const QString &errorMsg);
00296 
00297     protected:
00298         void setupSlave(KIO::Slave *slave, const KURL &url, const QString &protocol, const QString &proxy , bool newSlave, const KIO::MetaData *config=0);
00299         bool startJobScheduled(ProtocolInfo *protInfo);
00300         bool startJobDirect();
00301         Scheduler();
00302 
00303     protected slots:
00304         void startStep();
00305         void slotCleanIdleSlaves();
00306         void slotSlaveConnected();
00307         void slotSlaveError(int error, const QString &errorMsg);
00308         void slotScheduleCoSlave();
00310         void slotUnregisterWindow(QObject *);
00311 
00312     private:
00313         class ProtocolInfoDict;
00314         class ExtraJobData;
00315 
00316         Scheduler(const Scheduler&);
00317         static Scheduler *self();
00318         static Scheduler *instance;
00319         void _doJob(SimpleJob *job);
00320         void _scheduleJob(SimpleJob *job);
00321         void _cancelJob(SimpleJob *job);
00322         void _jobFinished(KIO::SimpleJob *job, KIO::Slave *slave);
00323         void _scheduleCleanup();
00324         void _putSlaveOnHold(KIO::SimpleJob *job, const KURL &url);
00325         void _removeSlaveOnHold();
00326         Slave *_getConnectedSlave(const KURL &url, const KIO::MetaData &metaData );
00327         bool _assignJobToSlave(KIO::Slave *slave, KIO::SimpleJob *job);
00328         bool _disconnectSlave(KIO::Slave *slave);
00329         void _checkSlaveOnHold(bool b);
00330         void _publishSlaveOnHold();
00331         void _registerWindow(QWidget *wid);
00332         
00333         Slave *findIdleSlave(ProtocolInfo *protInfo, SimpleJob *job, bool &exact);
00334         Slave *createSlave(ProtocolInfo *protInfo, SimpleJob *job, const KURL &url);
00335         
00336 
00337         QTimer slaveTimer;
00338         QTimer coSlaveTimer;
00339         QTimer cleanupTimer;
00340         bool busy;
00341 
00342         SlaveList *slaveList;
00343         SlaveList *idleSlaves;
00344         SlaveList *coIdleSlaves;
00345 
00346         ProtocolInfoDict *protInfoDict;
00347         Slave *slaveOnHold;
00348         KURL urlOnHold;
00349         JobList newJobs;
00350 
00351         QPtrDict<JobList> coSlaves;
00352         ExtraJobData *extraJobData;
00353         SlaveConfig *slaveConfig;
00354         SessionData *sessionData;
00355         bool checkOnHold;
00356         QMap<QObject *,WId> m_windowList;
00357     protected:
00358     virtual void virtual_hook( int id, void* data );
00359     private:
00360     class SchedulerPrivate* d;
00361 };
00362 
00363 }
00364 #endif

kio

Skip menu "kio"
  • Main Page
  • Modules
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

API Reference

Skip menu "API Reference"
  • dcop
  • DNSSD
  • interfaces
  • Kate
  • kconf_update
  • KDECore
  • KDED
  • kdefx
  • KDEsu
  • kdeui
  • KDocTools
  • KHTML
  • KImgIO
  • KInit
  • kio
  • kioslave
  • KJS
  • KNewStuff
  • KParts
  • KUtils
Generated for API Reference by doxygen 1.5.9
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal