kresolverworkerbase.h00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef KRESOLVERWORKERBASE_H
00026 #define KRESOLVERWORKERBASE_H
00027
00028 #include "kresolver.h"
00029
00030
00031 class QString;
00032 template <class T> class QValueList;
00033
00034 namespace KNetwork {
00035
00036 namespace Internal
00037 {
00038 class KResolverThread;
00039 struct InputData;
00040 }
00041
00060 class KResolverWorkerBase
00061 {
00062 public:
00063
00071 class ResolverLocker
00072 {
00073 public:
00077 ResolverLocker(KResolverWorkerBase* parent)
00078 : parent( parent )
00079 {
00080 parent->acquireResolver();
00081 }
00082
00086 ~ResolverLocker()
00087 {
00088 parent->releaseResolver();
00089 }
00090
00096 void openClose()
00097 {
00098 parent->releaseResolver();
00099 parent->acquireResolver();
00100 }
00101
00102 private:
00104 KResolverWorkerBase* parent;
00105 };
00106 private:
00107
00108 KNetwork::Internal::KResolverThread *th;
00109 const KNetwork::Internal::InputData *input;
00110 friend class KNetwork::Internal::KResolverThread;
00111 friend class KNetwork::Internal::KResolverManager;
00112 friend class KResolverWorkerBase::ResolverLocker;
00113
00114 int m_finished : 1;
00115 int m_reserved : 31;
00116
00117 public:
00125 KResolverResults results;
00126
00127 public:
00128
00129 KResolverWorkerBase();
00130
00131
00132 virtual ~KResolverWorkerBase();
00133
00137 QString nodeName() const;
00138
00142 QString serviceName() const;
00143
00147 int flags() const;
00148
00152 int familyMask() const;
00153
00157 int socketType() const;
00158
00162 int protocol() const;
00163
00167 QCString protocolName() const;
00168
00175 void finished();
00176
00177 protected:
00178
00191 virtual bool run() = 0;
00192
00212 virtual bool preprocess() = 0;
00213
00222 virtual bool postprocess();
00223
00227 inline void setError(int errorcode, int syserror = 0)
00228 { results.setError(errorcode, syserror); }
00229
00245 bool enqueue(KResolver* other);
00246
00250 bool enqueue(KResolverWorkerBase* worker);
00251
00259 bool checkResolver();
00260
00272 void acquireResolver();
00273
00280 void releaseResolver();
00281
00282 };
00283
00289 class KResolverWorkerFactoryBase
00290 {
00291 public:
00292 virtual KResolverWorkerBase* create() const = 0;
00293
00299 static void registerNewWorker(KResolverWorkerFactoryBase* factory);
00300 };
00301
00307 template<class Worker>
00308 class KResolverWorkerFactory: public KResolverWorkerFactoryBase
00309 {
00310 public:
00311 virtual KResolverWorkerBase* create() const
00312 { return new Worker; }
00313 };
00314
00315 }
00316
00317 #endif
|