summaryrefslogtreecommitdiffstats
path: root/dcop/dcopclient.h
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commitce4a32fe52ef09d8f5ff1dd22c001110902b60a2 (patch)
tree5ac38a06f3dde268dc7927dc155896926aaf7012 /dcop/dcopclient.h
downloadtdelibs-ce4a32fe52ef09d8f5ff1dd22c001110902b60a2.tar.gz
tdelibs-ce4a32fe52ef09d8f5ff1dd22c001110902b60a2.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdelibs@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'dcop/dcopclient.h')
-rw-r--r--dcop/dcopclient.h840
1 files changed, 840 insertions, 0 deletions
diff --git a/dcop/dcopclient.h b/dcop/dcopclient.h
new file mode 100644
index 000000000..2024aeaeb
--- /dev/null
+++ b/dcop/dcopclient.h
@@ -0,0 +1,840 @@
+/*
+Copyright (c) 1999 Preston Brown <pbrown@kde.org>
+Copyright (c) 1999, 2000 Matthias Ettrich <ettrich@kde.org>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#ifndef _DCOPCLIENT_H
+#define _DCOPCLIENT_H
+
+#include <qobject.h>
+#include <qcstring.h>
+#include <qvaluelist.h>
+#include <qstring.h>
+#include <kdatastream.h> // needed for proper bool marshalling
+#include <kdelibs_export.h>
+
+class DCOPObjectProxy;
+class DCOPClientPrivate;
+class DCOPClientTransaction;
+
+typedef QValueList<QCString> QCStringList;
+
+/**
+ * Inter-process communication and remote procedure calls
+ * for KDE applications.
+ *
+ * This class provides IPC and RPC for KDE applications. Usually you
+ * will not have to instantiate one yourself because KApplication
+ * contains a method to return a pointer to a DCOPClient object which
+ * can be used for your whole application.
+ *
+ * Before being able to send or receive any DCOP messages, you will have
+ * to attach your client object to the DCOP server, and then register
+ * your application with a specific name. See attach()
+ * and registerAs() for
+ * more information.
+ *
+ * Data to be sent should be serialized into a QDataStream which was
+ * initialized with the QByteArray that you actually intend to send
+ * the data in. An example of how you might do this:
+ *
+ * \code
+ * QByteArray data;
+ * QDataStream arg(data, IO_WriteOnly);
+ * arg << QString("This is text I am serializing");
+ * client->send("someApp", "someObject", "someFunction(QString)", data);
+ * \endcode
+ *
+ * @see KApplication::dcopClient()
+ * @author Preston Brown <pbrown@kde.org>, Matthias Ettrich <ettrich@kde.org>
+ */
+class DCOP_EXPORT DCOPClient : public QObject
+{
+ Q_OBJECT
+
+ public:
+ /**
+ * Constructs a new DCOP client, but does not attach to any server. */
+ DCOPClient();
+
+ /**
+ * Cleans up any open connections and dynamic data.
+ */
+ virtual ~DCOPClient();
+
+ /**
+ * Sets the address of a server to use upon attaching.
+ *
+ * If no server address is ever specified, attach will try its best to
+ * find the server anyway.
+ * @param addr the new address of the server
+ */
+ static void setServerAddress(const QCString &addr);
+
+ /**
+ * Attaches to the DCOP server.
+ *
+ * If the connection was already attached,
+ * the connection will be re-established with the current server address.
+ *
+ * Naturally, only attached application can use DCOP services.
+ *
+ * If a QApplication object exists then client registers itself as
+ * QApplication::name() + "-" + \<pid\>.
+ * If no QApplication object exists the client registers itself as
+ * "anonymous".
+ *
+ * If you want to register differently, you should use registerAs()
+ * instead.
+ *
+ * @return true if attaching was successful.
+ */
+ bool attach();
+
+ /**
+ * @internal
+ * Internal function for KUniqueApplication to register the DCOPClient
+ * with the application in case the application didn't exist at the
+ * time the DCOPClient was created.
+ */
+ void bindToApp();
+
+ /**
+ * Detaches from the DCOP server.
+ * @return true if successful, false otherwise
+ */
+ bool detach();
+
+ /**
+ * Returns whether or not the client is attached to the server.
+ * @return true if attached, false if not
+ */
+ bool isAttached() const;
+
+ /**
+ * Returns whether the client is attached to a server owned by
+ * another user.
+ * @return true if attached to a foreign server, false if not
+ */
+ bool isAttachedToForeignServer() const;
+
+ /**
+ * Returns whether the client handles incoming calls.
+ * @return true if the client accepts calls
+ */
+ bool acceptCalls() const;
+
+ /**
+ * Specify whether the client should accept incoming calls.
+ * By default clients accept incoming calls, but not when connected
+ * to a foreign server.
+ * @param b true to accept calls, false to reject them
+ */
+ void setAcceptCalls(bool b);
+
+ /**
+ * Returns whether the DCOP - Qt bridge is enabled.
+ * By default the DCOP - Qt bridge is enabled.
+ * @return true if Qt objects are accessible over DCOP
+ * @since 3.0.2
+ */
+ bool qtBridgeEnabled(); // ### KDE 4.0: make const
+
+ /**
+ * Specify whether Qt objects of the application should be accessible
+ * via DCOP.
+ * By default the DCOP - Qt bridge is enabled.
+ * @param b true to make Qt objects accessible over DCOP
+ * @since 3.0.2
+ */
+ void setQtBridgeEnabled(bool b);
+
+ /**
+ * Registers at the DCOP server.
+ *
+ * If the application was already registered,
+ * the registration will be re-done with the new appId.
+ *
+ * @p appId is a @p unique application/program id that the server
+ * will use to associate requests with. If there is already an application
+ * registered with the same name, the server will add a number to the
+ * id to unify it. If @p addPID is true, the PID of the current process
+ * will be added to id.
+ *
+ * Registration is necessary if you want to allow other clients to talk
+ * to you. They can do so using your @p appId as first parameter
+ * for send() or call(). If you just want to talk to
+ * other clients, you
+ * do not need to register at the server. In that case attach() is
+ * enough.
+ * It will implicitly register you as "anonymous".
+ *
+ * @param appId the id of the application
+ * @param addPID true to add the process id
+ * @return The actual @p appId used for the registration or a null string
+ * if the registration wasn't successful.
+ */
+ QCString registerAs( const QCString &appId, bool addPID = true );
+
+ /**
+ * Returns whether or not the client is registered at the server.
+ * @return true if registered at the server
+ */
+ bool isRegistered() const;
+
+ /**
+ * Returns the current app id or a null string if the application
+ * hasn't yet been registered.
+ * @return the application id, or QString::null if not registered
+ */
+ QCString appId() const;
+
+ /**
+ * Returns the socket fd that is used for communication with the server.
+ * @return The socket over which DCOP is communicating with the server.
+ */
+ int socket() const;
+
+ /**
+ * Temporarily suspends processing of DCOP events.
+ * This can be useful if you need to show e.g. a dialog before
+ * your application is ready to accept DCOP requests. Normally the
+ * dialog would start an event loop and in this event loop DCOP
+ * requests will be handled.
+ *
+ * Be aware that not responding to DCOP requests may cause other
+ * programs that want to communicate with your application, to hang.
+ * @see resume()
+ * @see isSuspended()
+ */
+ void suspend();
+
+ /**
+ * Resumes the processing of DCOP events.
+ * @see suspend().
+ * @see isSuspended()
+ */
+ void resume();
+
+ /**
+ * Returns whether DCOP events are being processed.
+ * @see suspend()
+ * @see resume().
+ * @since 3.1
+ */
+ bool isSuspended() const;
+
+ /**
+ * Sends a data block to the server.
+ *
+ * @param remApp The remote application id.
+ * @param remObj The name of the remote object.
+ * @param remFun The remote function in the specified object to call.
+ * @param data The data to provide to the remote function.
+ *
+ * @return Whether or not the server was able to accept the send.
+ */
+ bool send(const QCString &remApp, const QCString &remObj,
+ const QCString &remFun, const QByteArray &data);
+
+ /**
+ * This function acts exactly the same as the above, but the data
+ * parameter can be specified as a QString for convenience.
+ *
+ * @param remApp The remote application id.
+ * @param remObj The name of the remote object.
+ * @param remFun The remote function in the specified object to call.
+ * @param data The data to provide to the remote function.
+ *
+ * @return Whether or not the server was able to accept the send.
+ */
+ bool send(const QCString &remApp, const QCString &remObj,
+ const QCString &remFun, const QString &data);
+
+ /**
+ * Performs a synchronous send and receive.
+ *
+ * The parameters are the same as for send, with the exception of
+ * another QByteArray being provided for results to be
+ * (optionally) returned in.
+ *
+ * A call blocks the application until the process receives the
+ * answer.
+ *
+ * If @p useEventLoop is true, a local event loop will be started after
+ * 1/10th of a second in order to keep the user interface updated
+ * (by processing paint events and such) until an answer is received.
+ *
+ * @param remApp the remote application's id
+ * @param remObj the remote object id
+ * @param remFun the remote function id
+ * @param data the data to send
+ * @param replyType the type of the reply will be written here
+ * @param replyData the data of the reply will be written here
+ * @param useEventLoop if true the event loop will be started when
+ * the call blocks too long
+ * @param timeout timeout for the call in miliseconds, or -1 for no timeout
+ * @return true if successful, false otherwise
+ *
+ * @since 3.2
+ *
+ * @see send()
+ */
+ bool call(const QCString &remApp, const QCString &remObj,
+ const QCString &remFun, const QByteArray &data,
+ QCString& replyType, QByteArray &replyData,
+ bool useEventLoop/*=false*/, int timeout/*=-1*/);
+ /**
+ * @deprecated
+ */
+ // KDE4 merge with above
+ bool call(const QCString &remApp, const QCString &remObj,
+ const QCString &remFun, const QByteArray &data,
+ QCString& replyType, QByteArray &replyData,
+ bool useEventLoop=false);
+
+ /**
+ * Performs a asynchronous send with receive callback.
+ *
+ * The first four parameters are the same as for send.
+ *
+ * @p callBackObj and @p callBackSlot specify a call back
+ * slot that is called when an answer is received.
+ *
+ * The slot should have the following signature:
+ * callBackSlot(int callId, const QCString& replyType,
+ * const QByteArray &replyData);
+ *
+ *
+ * @param remApp the remote application's id
+ * @param remObj the remote object id
+ * @param remFun the remote function id
+ * @param data the data to send
+ * @param callBackObj object to call back
+ * @param callBackSlot slot to call back
+ * @return 0 on failure, on success a callId > 0 is
+ * returned that will be passed as first argument of
+ * the result call back
+ *
+ * @see send()
+ * @see callback()
+ *
+ * @since 3.2
+ */
+ int callAsync(const QCString &remApp, const QCString &remObj,
+ const QCString &remFun, const QByteArray &data,
+ QObject *callBackObj, const char *callBackSlot);
+
+ /**
+ * Searches for an object which matches a criteria.
+ *
+ * findObject calls @p remFun in the applications and objects identified
+ * by @p remApp and @p remObj until @p remFun returns true. The name of
+ * the application and object that returned true are returned in
+ * @p foundApp and @p foundObj respectively.
+ *
+ * If @p remFun is empty a default function is called in the object
+ * which always returns @p true.
+ *
+ * A findObject blocks the application until the process receives the
+ * answer.
+ *
+ * If @p useEventLoop is true, a local event loop will be started after
+ * 1/10th of a second in order to keep the user interface updated
+ * (by processing paint events and such) until an answer is received.
+ *
+ * @param remApp The remote application id.
+ * @param remObj The name of the remote object.
+ * @param remFun The remote function in the specified object to call.
+ * This function should return a bool and is used as
+ * criteria.
+ * @param data The data to provide to the remote function.
+ * @param foundApp The remote application id that matched the criteria.
+ * @param foundObj The remote object that matched the criteria.
+ * @param useEventLoop if true the event loop will be started when
+ * the call blocks too long
+ * @param timeout timeout for the call in miliseconds, or -1 for no timeout
+ * @return true is returned when an object was found for which @p remFun
+ * returned true. If no such object is the function returns false.
+ *
+ * @since 3.2
+ *
+ * @see send()
+ */
+ bool findObject(const QCString &remApp, const QCString &remObj,
+ const QCString &remFun, const QByteArray &data,
+ QCString &foundApp, QCString &foundObj,
+ bool useEventLoop/*=false*/, int timeout/*=-1*/);
+
+ /**
+ * @deprecated
+ */
+ // KDE4 merge with above
+ bool findObject(const QCString &remApp, const QCString &remObj,
+ const QCString &remFun, const QByteArray &data,
+ QCString &foundApp, QCString &foundObj,
+ bool useEventLoop=false);
+
+
+ /**
+ * Emits @p signal as DCOP signal from object @p object with @p data as
+ * arguments.
+ */
+ void emitDCOPSignal( const QCString &object, const QCString &signal,
+ const QByteArray &data);
+
+ /* For backwards compatibility */
+ void emitDCOPSignal( const QCString &signal, const QByteArray &data);
+
+ /**
+ * Connects to a DCOP signal.
+ * @param sender the name of the client that emits the signal. When empty
+ * the signal will be passed from any client.
+ * @param senderObj the name of the sending object that emits the signal.
+ * @param signal the name of the signal. The arguments should match with slot.
+ * @param receiverObj The name of the object to call
+ * @param slot The name of the slot to call. Its arguments should match with signal.
+ * @param Volatile If true, the connection will not be reestablished when
+ * @p sender unregisters and reregisters with DCOP. In this case the @p sender
+ * must be registered when the connection is made.
+ * If false, the connection will be reestablished when @p sender reregisters.
+ * In this case the connection can be made even if @p sender is not registered
+ * at that time.
+ *
+ * @return false if a connection could not be established.
+ * This will be the case when
+ * @li @p Volatile is true and @p sender does not exist.
+ * @li @p signal and @p slot do not have matching arguments.
+ */
+ bool connectDCOPSignal( const QCString &sender, const QCString &senderObj,
+ const QCString &signal,
+ const QCString &receiverObj, const QCString &slot,
+ bool Volatile);
+
+ /**
+ * @deprecated
+ * For backwards compatibility
+ */
+ bool connectDCOPSignal( const QCString &sender, const QCString &signal,
+ const QCString &receiverObj, const QCString &slot,
+ bool Volatile) KDE_DEPRECATED;
+
+ /**
+ * Disconnects a DCOP signal.
+ *
+ * A special case is when both @p sender & @p signal are empty. In this
+ * case all connections related to @p receiverObj in the current client
+ * are disconnected. (Both connections from as well as to this object!)
+ *
+ * @param sender the name of the client that emits the signal.
+ * @param senderObj the name of the object that emits the signal.
+ * If empty all objects will be disconnected.
+ * @param signal the name of the signal. The arguments should match with slot.
+ * @param receiverObj The name of the object the signal is connected to.
+ * If empty all objects will be disconnected.
+ * @param slot The name of the slot the signal is connected to.
+ * If empty all slots will be disconnected.
+ * @return false if no connection(s) where removed.
+ */
+ bool disconnectDCOPSignal( const QCString &sender, const QCString &senderObj,
+ const QCString &signal,
+ const QCString &receiverObj, const QCString &slot);
+
+ /**
+ * @deprecated
+ * For backwards compatibility
+ */
+ bool disconnectDCOPSignal( const QCString &sender, const QCString &signal,
+ const QCString &receiverObj, const QCString &slot) KDE_DEPRECATED;
+
+ /**
+ * Reimplement this function to handle app-wide function calls unassociated w/an object.
+ *
+ * Note that @p fun is normalized. See normalizeFunctionSignature().
+ *
+ * If you do not want to reimplement this function for whatever reason,
+ * you can also use a default object or a DCOPObjectProxy.
+ *
+ * @param fun the normalized function signature
+ * @param data the received data
+ * @param replyType write the reply type in this string
+ * @param replyData write the reply data in this array
+ * @return true if successful, false otherwise
+ * @see setDefaultObject()
+ */
+ virtual bool process(const QCString &fun, const QByteArray &data,
+ QCString& replyType, QByteArray &replyData);
+
+ /**
+ * Delays the reply of the current function call
+ * until endTransaction() is called.
+ *
+ * This allows a server to queue requests.
+ *
+ * Note: Should be called from inside process() only!
+ * @see endTransaction()
+ */
+ DCOPClientTransaction *beginTransaction( );
+
+ /**
+ * Sends the delayed reply of a function call.
+ * @param t the transaction as received from beginTransaction()
+ * @param replyType write the reply type in this string
+ * @param replyData write the reply data in this array
+ * @see beginTransaction()
+ */
+ void endTransaction( DCOPClientTransaction *t, QCString& replyType, QByteArray &replyData);
+
+ /**
+ * Test whether the current function call is delayed.
+ *
+ * Note: Should be called from inside process() only!
+ * @return The ID of the current transaction or
+ * 0 if no transaction is going on.
+ * @see process()
+ * @see beginTransaction()
+ */
+ Q_INT32 transactionId() const;
+
+ /**
+ * Checks whether @p remApp is registered with the DCOP server.
+ * @param remApp the id of the remote application
+ * @return true if the remote application is registered, otherwise @p false.
+ */
+ bool isApplicationRegistered( const QCString& remApp);
+
+ /**
+ * Retrieves the list of all currently registered applications
+ * from dcopserver.
+ * @return a list of all regietered applications
+ */
+ QCStringList registeredApplications();
+
+ /**
+ * Retrieves the list of objects of the remote application @p remApp.
+ * @param remApp he id of the application
+ * @param ok if not null, the function sets @p ok to true if successful
+ * and false if an error occurred
+ * @return the list of object ids
+ */
+ QCStringList remoteObjects( const QCString& remApp, bool *ok = 0 );
+
+ /**
+ * Retrieves the list of interfaces of the remote object @p remObj
+ * of application @p remApp.
+ * @param remApp the id of the application
+ * @param remObj the id of the object
+ * @param ok if not null, the function sets @p ok to true if successful
+ * and false if an error occurred
+ * @return the list of interfaces
+ */
+ QCStringList remoteInterfaces( const QCString& remApp, const QCString& remObj , bool *ok = 0 );
+
+ /**
+ * Retrieves the list of functions of the remote object @p remObj
+ * of application @p remApp
+ * @param remApp the id of the application
+ * @param remObj the id of the object
+ * @param ok if not null, the function sets @p ok to true if successful
+ * and false if an error occurred
+ * @return the list of function ids
+ */
+ QCStringList remoteFunctions( const QCString& remApp, const QCString& remObj , bool *ok = 0 );
+
+ /**
+ * @internal
+ * Receives a DCOPSend or DCOPCall message from the server.
+ *
+ * @param app The application the message was intended for. Should be
+ * equal to our appId that we passed when the DCOPClient was
+ * created.
+ * @param obj The name of the object to pass the data on to.
+ * @param fun The name of the function in the object to call.
+ * @param data The arguments for the function.
+ * @param replyType write the reply type in this string
+ * @param replyData write the reply data in this array
+ * @return true if successful, false otherwise
+ */
+ bool receive(const QCString &app, const QCString &obj,
+ const QCString &fun, const QByteArray& data,
+ QCString& replyType, QByteArray &replyData);
+
+ /**
+ * @internal
+ * Receives a @p DCOPFind message from the server.
+ *
+ * @param app The application the message was intended for. Should be
+ * equal to our appId that we passed when the DCOPClient was
+ * created.
+ * @param obj The name of the object to pass the data on to.
+ * @param fun The name of the function in the object to call.
+ * @param data The arguments for the function.
+ * @param replyType write the reply type in this string
+ * @param replyData write the reply data in this array
+ */
+ bool find(const QCString &app, const QCString &obj,
+ const QCString &fun, const QByteArray& data,
+ QCString& replyType, QByteArray &replyData);
+
+ /**
+ * Normalizes the function signature @p fun.
+ *
+ * A normalized signature doesn't contain any unnecessary whitespace
+ * anymore. The remaining whitespace consists of single blanks only (0x20).
+ *
+ * Example for a normalized signature:
+ * \code
+ * "someFunction(QString,int)"
+ * \endcode
+ *
+ * When using send() or call(), normalization is done
+ * automatically for you.
+ *
+ * @param fun the function signature to normalize
+ * @return the normalized function
+ */
+ static QCString normalizeFunctionSignature( const QCString& fun );
+
+
+ /**
+ * Returns the appId of the last application that talked to us.
+ * @return the application id of the last application that send a message
+ * to this client
+ */
+ QCString senderId() const;
+
+
+ /**
+ * Installs object @p objId as application-wide default object.
+ *
+ * All app-wide messages that have not been processed by the dcopclient
+ * will be send further to @p objId.
+ * @param objId the id of the new default object
+ */
+ void setDefaultObject( const QCString& objId );
+
+ /**
+ * Returns the current default object or an empty string if no object is
+ * installed as default object.
+ *
+ * A default object receives application-wide messages that have not
+ * been processed by the DCOPClient itself.
+ * @return the id of the new default object
+ */
+ QCString defaultObject() const;
+
+ /**
+ * Enables / disables the applicationRegistered() /
+ * applicationRemoved() signals.
+ * Note that a counter is maintained about how often this method
+ * was called. If this method is called twice with @p enabled set to
+ * true, notifications will be enabled until it was called with
+ * @p enabled set to false as often.
+ *
+ * They are disabled by default.
+ * @param enabled true to enable notifications, false to disable
+ */
+ void setNotifications( bool enabled );
+
+ /**
+ * Tells the dcopserver to treat the client as daemon client, not
+ * as regular client.
+ * If the number of regular clients drops down to zero, the
+ * dcopserver will emit a KDE termination signal after 10
+ * seconds.
+ * @param daemonMode true to enable daemon mode, false to disable
+ */
+ void setDaemonMode( bool daemonMode );
+
+ /**
+ * @internal
+ *
+ * Switch to priority call mode.
+ */
+ void setPriorityCall(bool);
+
+ /**
+ * Returns the application's main dcop client. The main client can
+ * be used by objects that do not have any specific access to a dcop
+ * client. In KDE applications, the main client usually is the same
+ * as KApplication::dcopClient().
+ * @return the application's main dcop client
+ */
+ static DCOPClient* mainClient();
+
+ /**
+ * Sets the application's main dcop client. The main client can
+ * be used by objects that do not have any specific access to a dcop
+ * client. In KDE applications, the main client usually is the same
+ * as KApplication::dcopClient().
+ * @param mainClient the new main dcop client
+ */
+ static void setMainClient( DCOPClient* mainClient);
+
+ /**
+ * Look for the given client only in this process. This can be used
+ * to check whether a given client (by name) is running in the same
+ * process or in another one.
+ */
+ static DCOPClient* findLocalClient( const QCString &_appId );
+
+ /**
+ * @internal Do not use.
+ */
+ static void emergencyClose();
+
+ /**
+ * @internal Do not use.
+ *
+ * Provides information about the last DCOP call for debugging purposes.
+ */
+ static const char *postMortemSender();
+ /** @internal */
+ static const char *postMortemObject();
+ /** @internal */
+ static const char *postMortemFunction();
+
+ /**
+ * File with information how to reach the dcopserver.
+ * @param hostname Hostname to use, if empty current hostname of
+ * the system is used.
+ * @return Filename that contains information how to contact the
+ * DCOPserver.
+ */
+ static QCString dcopServerFile(const QCString &hostname=0);
+
+ /**
+ * @deprecated
+ * For backwards compatibility with KDE 2.x
+ * // KDE4 remove
+ */
+ static QCString dcopServerFileOld(const QCString &hostname=0) KDE_DEPRECATED;
+
+ /**
+ * Return the path of iceauth or an empty string if not found.
+ */
+ static QCString iceauthPath();
+
+signals:
+ /**
+ * Indicates that the application @p appId has been registered with
+ * the server we are attached to.
+ *
+ * You need to call setNotifications() first, to tell the DCOP server
+ * that you want to get these events.
+ * @param appId the id of the new application
+ */
+ void applicationRegistered( const QCString& appId );
+ /**
+ * Indicates that the formerly registered application @p appId has
+ * been removed.
+ *
+ * You need to call setNotifications() first, to tell the
+ * DCOP server that you want to get these events.
+ * @param appId the id of the removed application
+ */
+ void applicationRemoved( const QCString& appId );
+
+ /**
+ * Indicates that the process of establishing DCOP communications failed
+ * in some manner.
+ *
+ * Usually attached to a dialog box or some other visual
+ * aid.
+ * @param msg the message tha contains further information
+ */
+ void attachFailed(const QString &msg);
+
+ /**
+ * Indicates that user input shall be blocked or released,
+ * depending on the argument.
+ *
+ * The signal is emitted whenever the client has to wait too long
+ * (i.e. more than 1/10 of a second) for an answer to a
+ * synchronous call. In that case, it will enter a local event
+ * loop to keep the GUI updated until finally an answer arrives.
+ *
+ * In KDE, the KApplication object connects to this signal to be
+ * able to block any user input (i.e. mouse and key events) while
+ * we are waiting for an answer. If we did not do this, the
+ * application might end up in an illegal state, as a keyboard
+ * shortcut or a mouse action might cause another dcop call to be
+ * issued.
+ * @param block true to block user input, false otherwise
+ */
+ void blockUserInput( bool block );
+
+ /**
+ * @internal
+ *
+ * Signal used for callbacks of async calls.
+ * This signal is automatically connected to the call back
+ * slot specified in the async call.
+ * @see callAsync()
+ * @since 3.2
+ */
+ void callBack(int, const QCString&, const QByteArray &);
+
+public slots:
+ /**
+ * Process data from the socket.
+ * @param socknum the fd of the socket
+ */
+ void processSocketData(int socknum);
+
+protected slots:
+
+private slots:
+ void processPostedMessagesInternal();
+ void asyncReplyReady();
+ void eventLoopTimeout();
+
+public:
+ class ReplyStruct;
+
+ /**
+ * @internal
+ **/
+ void handleAsyncReply(ReplyStruct *replyStruct);
+
+private:
+
+ bool isLocalTransactionFinished(Q_INT32 id, QCString &replyType, QByteArray &replyData);
+
+ bool attachInternal( bool registerAsAnonymous = true );
+
+ bool callInternal(const QCString &remApp, const QCString &remObj,
+ const QCString &remFun, const QByteArray &data,
+ QCString& replyType, QByteArray &replyData,
+ bool useEventLoop, int timeout, int minor_opcode);
+
+
+ bool callInternal(const QCString &remApp, const QCString &remObjId,
+ const QCString &remFun, const QByteArray &data,
+ ReplyStruct *replyStruct,
+ bool useEventLoop, int timeout, int minor_opcode);
+
+protected:
+ virtual void virtual_hook( int id, void* data );
+private:
+ DCOPClientPrivate *d;
+};
+
+#endif