kmessageio.h00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _KMESSAGEIO_H_
00025 #define _KMESSAGEIO_H_
00026
00027 #include <qcstring.h>
00028 #include <qhostaddress.h>
00029 #include <qobject.h>
00030 #include <qstring.h>
00031 #include <qptrqueue.h>
00032 #include <qfile.h>
00033 #include <kdebug.h>
00034
00035 class QSocket;
00036 class KProcess;
00037
00038
00039
00056 class KMessageIO : public QObject
00057 {
00058 Q_OBJECT
00059
00060 public:
00064 KMessageIO (QObject *parent = 0, const char *name = 0);
00065
00069 ~KMessageIO ();
00070
00074 virtual int rtti() const {return 0;}
00075
00079
00080 virtual bool isNetwork () const
00081 {
00082 kdError(11001) << "Calling PURE virtual isNetwork...BAD" << endl;
00083 return false;
00084 }
00085
00093
00094 virtual bool isConnected () const
00095 {
00096 kdError(11001) << "Calling PURE virtual isConencted...BAD" << endl;
00097 return false;
00098 }
00099
00108 void setId (Q_UINT32 id);
00109
00113 Q_UINT32 id ();
00114
00119 virtual Q_UINT16 peerPort () const { return 0; }
00120
00125 virtual QString peerName () const { return QString::fromLatin1("localhost"); }
00126
00127
00128 signals:
00134 void received (const QByteArray &msg);
00135
00144 void connectionBroken ();
00145
00146 public slots:
00147
00157 virtual void send (const QByteArray &msg) = 0;
00158
00159 protected:
00160 Q_UINT32 m_id;
00161 };
00162
00163
00169 class KMessageSocket : public KMessageIO
00170 {
00171 Q_OBJECT
00172
00173 public:
00184 KMessageSocket (QString host, Q_UINT16 port, QObject *parent = 0,
00185 const char *name = 0);
00186
00195 KMessageSocket (QHostAddress host, Q_UINT16 port, QObject *parent = 0,
00196 const char *name = 0);
00197
00209 KMessageSocket (QSocket *socket, QObject *parent = 0, const char *name = 0);
00210
00222 KMessageSocket (int socketFD, QObject *parent = 0, const char *name = 0);
00223
00227 ~KMessageSocket ();
00228
00232 virtual int rtti() const {return 1;}
00233
00238 virtual Q_UINT16 peerPort () const;
00239
00244 virtual QString peerName () const;
00245
00249 bool isNetwork() const { return true; }
00250
00254 bool isConnected () const;
00255
00262 void send (const QByteArray &msg);
00263
00264 protected slots:
00265 virtual void processNewData ();
00266
00267 protected:
00268 void initSocket ();
00269 QSocket *mSocket;
00270 bool mAwaitingHeader;
00271 Q_UINT32 mNextBlockLength;
00272
00273 bool isRecursive;
00274 };
00275
00276
00295 class KMessageDirect : public KMessageIO
00296 {
00297 Q_OBJECT
00298
00299 public:
00307 KMessageDirect (KMessageDirect *partner = 0, QObject *parent = 0, const char
00308 *name = 0);
00309
00313 ~KMessageDirect ();
00314
00318 virtual int rtti() const {return 2;}
00319
00320
00324 bool isNetwork() const { return false; }
00325
00334 bool isConnected () const;
00335
00342 void send (const QByteArray &msg);
00343
00344 protected:
00345 KMessageDirect *mPartner;
00346 };
00347
00348 class KMessageProcess : public KMessageIO
00349 {
00350 Q_OBJECT
00351
00352 public:
00353 KMessageProcess(QObject *parent, QString file);
00354 ~KMessageProcess();
00355 bool isConnected() const;
00356 void send (const QByteArray &msg);
00357 void writeToProcess();
00358
00362 bool isNetwork() const { return false; }
00363
00367 virtual int rtti() const {return 3;}
00368
00369
00370
00371 public slots:
00372 void slotReceivedStdout(KProcess *proc, char *buffer, int buflen);
00373 void slotReceivedStderr(KProcess *proc, char *buffer, int buflen);
00374 void slotProcessExited(KProcess *p);
00375 void slotWroteStdin(KProcess *p);
00376
00377 private:
00378 QString mProcessName;
00379 KProcess *mProcess;
00380 QPtrQueue <QByteArray> mQueue;
00381 QByteArray *mSendBuffer;
00382 QByteArray mReceiveBuffer;
00383 unsigned int mReceiveCount;
00384 };
00385
00386 class KMessageFilePipe : public KMessageIO
00387 {
00388 Q_OBJECT
00389
00390 public:
00391 KMessageFilePipe(QObject *parent,QFile *readFile,QFile *writeFile);
00392 ~KMessageFilePipe();
00393 bool isConnected() const;
00394 void send (const QByteArray &msg);
00395 void exec();
00396
00400 bool isNetwork() const { return false; }
00401
00405 virtual int rtti() const {return 4;}
00406
00407
00408
00409 private:
00410 QFile *mReadFile;
00411 QFile *mWriteFile;
00412 QByteArray mReceiveBuffer;
00413 unsigned int mReceiveCount;
00414 };
00415
00416 #endif
|