00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 #ifndef _DCOPCLIENT_H
00024 #define _DCOPCLIENT_H
00025 
00026 #include <qobject.h>
00027 #include <qcstring.h>
00028 #include <qvaluelist.h>
00029 #include <qstring.h>
00030 #include <kdatastream.h> 
00031 #include <kdemacros.h>
00032 
00033 class DCOPObjectProxy;
00034 class DCOPClientPrivate;
00035 class DCOPClientTransaction;
00036 
00037 typedef QValueList<QCString> QCStringList;
00038 
00068 class DCOPClient : public QObject
00069 {
00070   Q_OBJECT
00071 
00072  public:
00075   DCOPClient();
00076 
00080   virtual ~DCOPClient();
00081 
00089   static void setServerAddress(const QCString &addr);
00090 
00109   bool attach();
00110 
00117   void bindToApp();
00118 
00123   bool detach();
00124 
00129   bool isAttached() const;
00130 
00136   bool isAttachedToForeignServer() const;
00137 
00142   bool acceptCalls() const;
00143 
00150   void setAcceptCalls(bool b);
00151 
00158   bool qtBridgeEnabled(); 
00159 
00167   void setQtBridgeEnabled(bool b);
00168 
00194   QCString registerAs( const QCString &appId, bool addPID = true );
00195 
00200   bool isRegistered() const;
00201 
00207   QCString appId() const;
00208 
00213   int socket() const;
00214 
00227   void suspend();
00228 
00234   void resume();
00235 
00242   bool isSuspended() const;
00243 
00254   bool send(const QCString &remApp, const QCString &remObj,
00255         const QCString &remFun, const QByteArray &data);
00256 
00268   bool send(const QCString &remApp, const QCString &remObj,
00269         const QCString &remFun, const QString &data);
00270 
00300   bool call(const QCString &remApp, const QCString &remObj,
00301         const QCString &remFun, const QByteArray &data,
00302         QCString& replyType, QByteArray &replyData,
00303         bool useEventLoop, int timeout);
00307   
00308   bool call(const QCString &remApp, const QCString &remObj,
00309         const QCString &remFun, const QByteArray &data,
00310         QCString& replyType, QByteArray &replyData,
00311         bool useEventLoop=false);
00312 
00341   int callAsync(const QCString &remApp, const QCString &remObj,
00342                 const QCString &remFun, const QByteArray &data,
00343                 QObject *callBackObj, const char *callBackSlot);
00344 
00381   bool findObject(const QCString &remApp, const QCString &remObj,
00382         const QCString &remFun, const QByteArray &data,
00383         QCString &foundApp, QCString &foundObj,
00384         bool useEventLoop, int timeout);
00385 
00389   
00390   bool findObject(const QCString &remApp, const QCString &remObj,
00391         const QCString &remFun, const QByteArray &data,
00392         QCString &foundApp, QCString &foundObj,
00393         bool useEventLoop=false);
00394 
00395 
00400   void emitDCOPSignal( const QCString &object, const QCString &signal,
00401                        const QByteArray &data);
00402 
00403   
00404   void emitDCOPSignal( const QCString &signal, const QByteArray &data);
00405 
00426   bool connectDCOPSignal( const QCString &sender, const QCString &senderObj,
00427                           const QCString &signal,
00428                           const QCString &receiverObj, const QCString &slot,
00429                           bool Volatile);
00430 
00435   bool connectDCOPSignal( const QCString &sender, const QCString &signal,
00436                           const QCString &receiverObj, const QCString &slot,
00437                           bool Volatile) KDE_DEPRECATED;
00438 
00456   bool disconnectDCOPSignal( const QCString &sender, const QCString &senderObj,
00457                           const QCString &signal,
00458                           const QCString &receiverObj, const QCString &slot);
00459 
00464   bool disconnectDCOPSignal( const QCString &sender, const QCString &signal,
00465                           const QCString &receiverObj, const QCString &slot) KDE_DEPRECATED;
00466 
00482   virtual bool process(const QCString &fun, const QByteArray &data,
00483                QCString& replyType, QByteArray &replyData);
00484 
00494   DCOPClientTransaction *beginTransaction( );
00495 
00503   void endTransaction( DCOPClientTransaction *t, QCString& replyType, QByteArray &replyData);
00504 
00514   Q_INT32 transactionId() const;
00515 
00521   bool isApplicationRegistered( const QCString& remApp);
00522 
00528   QCStringList registeredApplications();
00529 
00537   QCStringList remoteObjects( const QCString& remApp, bool *ok = 0 );
00538 
00548   QCStringList remoteInterfaces( const QCString& remApp, const QCString& remObj , bool *ok = 0 );
00549 
00559   QCStringList remoteFunctions( const QCString& remApp, const QCString& remObj , bool *ok = 0 );
00560 
00573   bool receive(const QCString &app, const QCString &obj,
00574            const QCString &fun, const QByteArray& data,
00575            QCString& replyType, QByteArray &replyData);
00576 
00588   bool find(const QCString &app, const QCString &obj,
00589         const QCString &fun, const QByteArray& data,
00590         QCString& replyType, QByteArray &replyData);
00591 
00609   static QCString normalizeFunctionSignature( const QCString& fun );
00610 
00611 
00617   QCString senderId() const;
00618 
00619 
00627   void setDefaultObject( const QCString& objId );
00628 
00637   QCString defaultObject() const;
00638 
00650   void setNotifications( bool enabled );
00651 
00660   void setDaemonMode( bool daemonMode );
00661 
00667   void setPriorityCall(bool);
00668 
00676   static DCOPClient* mainClient();
00677 
00685   static void setMainClient( DCOPClient* mainClient);
00686 
00692   static DCOPClient* findLocalClient( const QCString &_appId );
00693 
00697   static void emergencyClose();
00698 
00704   static const char *postMortemSender();
00706   static const char *postMortemObject();
00708   static const char *postMortemFunction();
00709 
00717   static QCString dcopServerFile(const QCString &hostname=0);
00718 
00723   static QCString dcopServerFileOld(const QCString &hostname=0) KDE_DEPRECATED;
00724 
00728   static QCString iceauthPath();
00729 
00730 signals:
00739   void applicationRegistered( const QCString& appId );
00748   void applicationRemoved( const QCString& appId );
00749 
00758   void attachFailed(const QString &msg);
00759 
00777   void blockUserInput( bool block );
00778 
00788   void callBack(int, const QCString&, const QByteArray &);
00789 
00790 public slots:
00791 
00792 protected slots:
00797   void processSocketData(int socknum);
00798 
00799 private slots:
00800   void processPostedMessagesInternal();
00801   void asyncReplyReady();
00802 
00803 public:
00804   class ReplyStruct;
00805 
00809   void handleAsyncReply(ReplyStruct *replyStruct);
00810 
00811 private:
00812 
00813   bool isLocalTransactionFinished(Q_INT32 id, QCString &replyType, QByteArray &replyData);
00814 
00815   bool attachInternal( bool registerAsAnonymous = true );
00816 
00817   bool callInternal(const QCString &remApp, const QCString &remObj,
00818         const QCString &remFun, const QByteArray &data,
00819         QCString& replyType, QByteArray &replyData,
00820         bool useEventLoop, int timeout, int minor_opcode);
00821 
00822 
00823   bool callInternal(const QCString &remApp, const QCString &remObjId,
00824             const QCString &remFun, const QByteArray &data,
00825             ReplyStruct *replyStruct,
00826             bool useEventLoop, int timeout, int minor_opcode);
00827 
00828 protected:
00829   virtual void virtual_hook( int id, void* data );
00830 private:
00831   DCOPClientPrivate *d;
00832 };
00833 
00834 #endif