dcopserver.h
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 #ifndef DCOPSERVER_H
00023 #define DCOPSERVER_H "$Id: dcopserver.h,v 1.35 2003/03/19 16:26:40 waba Exp $"
00024 
00025 #include <qobject.h>
00026 #include <qstring.h>
00027 #include <qsocketnotifier.h>
00028 #include <qptrlist.h>
00029 #include <qvaluelist.h>
00030 #include <qcstring.h>
00031 #include <qdict.h>
00032 #include <qptrdict.h>
00033 #include <qintdict.h>
00034 #include <qapplication.h>
00035 
00036 #define INT32 QINT32
00037 #ifdef Q_WS_X11
00038 #include <X11/Xlib.h>
00039 #include <X11/Xmd.h>
00040 #endif
00041 #include <KDE-ICE/ICElib.h>
00042 extern "C" {
00043 #include <KDE-ICE/ICEutil.h>
00044 #include <KDE-ICE/ICEmsg.h>
00045 #include <KDE-ICE/ICEproto.h>
00046 }
00047 
00048 class DCOPConnection;
00049 class DCOPListener;
00050 class DCOPSignalConnectionList;
00051 class DCOPSignals;
00052 class QTimer;
00053 
00054 typedef QValueList<QCString> QCStringList;
00055 
00059 class DCOPConnection : public QSocketNotifier
00060 {
00061 public:
00062     DCOPConnection( IceConn conn );
00063     ~DCOPConnection();
00064 
00065     DCOPSignalConnectionList *signalConnectionList();
00066 
00067     
00068     
00069     void waitForOutputReady(const QByteArray &_data, int start);
00070 
00071     
00072     
00073     void slotOutputReady();
00074 
00075     QCString appId;
00076     QCString plainAppId;
00077     IceConn iceConn;
00078     int notifyRegister;
00090     QPtrList <_IceConn> waitingOnReply;
00091     QPtrList <_IceConn> waitingForReply;
00092     QPtrList <_IceConn> waitingForDelayedReply;
00093     DCOPSignalConnectionList *_signalConnectionList;
00094     bool daemon;
00095     bool outputBlocked;
00096     QValueList <QByteArray> outputBuffer;
00097     unsigned long outputBufferStart;
00098     QSocketNotifier *outputBufferNotifier;
00099 };
00100 
00101 
00105 class DCOPServer : public QObject
00106 {
00107     Q_OBJECT
00108 public:
00109     DCOPServer(bool _suicide);
00110     ~DCOPServer();
00111 
00112     void* watchConnection( IceConn iceConn );
00113     void removeConnection( void* data );
00114     void processMessage( IceConn iceConn, int opcode, unsigned long length, Bool swap);
00115     void ioError( IceConn iceConn );
00116 
00117     bool receive(const QCString &app, const QCString &obj,
00118                  const QCString &fun, const QByteArray& data,
00119                  QCString& replyType, QByteArray &replyData, IceConn iceConn);
00120 
00121     DCOPConnection *findApp(const QCString &appId);
00122     DCOPConnection *findConn(IceConn iceConn)
00123        { return clients.find(iceConn); }
00124        
00125     void sendMessage(DCOPConnection *conn, const QCString &sApp,
00126                      const QCString &rApp, const QCString &rObj,
00127                      const QCString &rFun, const QByteArray &data);
00128 
00129 private slots:
00130     void newClient( int socket );
00131     void processData( int socket );
00132     void slotTerminate();
00133     void slotSuicide();
00134     void slotCleanDeadConnections();
00135     void slotOutputReady(int socket );
00136 
00137 private:
00138     void broadcastApplicationRegistration( DCOPConnection* conn, const QCString type,
00139         const QString& data );
00140     bool suicide;
00141     int majorOpcode;
00142     int currentClientNumber;
00143     CARD32 serverKey;
00144     DCOPSignals *dcopSignals;
00145     QTimer *m_timer;
00146     QTimer *m_deadConnectionTimer;
00147     QPtrList<DCOPListener> listener;
00148     QAsciiDict<DCOPConnection> appIds; 
00149     QPtrDict<DCOPConnection> clients; 
00150     QIntDict<DCOPConnection> fd_clients; 
00151     QPtrList<_IceConn> deadConnections;
00152 };
00153 
00154 extern DCOPServer* the_server;
00155 #endif
 
This file is part of the documentation for dcop Library Version 3.2.0.