| /* |
| * |
| * D-Bus++ - C++ bindings for D-Bus |
| * |
| * Copyright (C) 2005-2007 Paolo Durante <shackan@gmail.com> |
| * |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| * |
| */ |
| |
| |
| #ifndef __DBUSXX_PENDING_CALL_H |
| #define __DBUSXX_PENDING_CALL_H |
| |
| #include "api.h" |
| #include "util.h" |
| #include "message.h" |
| |
| namespace DBus { |
| |
| class Connection; |
| class PendingCall; |
| |
| typedef Slot<void, PendingCall *> AsyncReplyHandler; |
| |
| class DXXAPI PendingCall |
| { |
| public: |
| |
| struct Private; |
| |
| PendingCall(Private *); |
| |
| PendingCall(const PendingCall &); |
| |
| virtual ~PendingCall(); |
| |
| PendingCall &operator = (const PendingCall &); |
| |
| /*! |
| * \brief Checks whether the pending call has received a reply yet, or not. |
| * |
| * \return true If a reply has been received. |
| */ |
| bool completed(); |
| |
| /*! |
| * \brief Cancels the pending call, such that any reply or error received will |
| * just be ignored. |
| * |
| * Drops the dbus library's internal reference to the DBusPendingCall so will |
| * free the call if nobody else is holding a reference. However you usually |
| * get a reference from Connection::send_async() so probably your app |
| * owns a ref also. |
| * |
| * Note that canceling a pending call will not simulate a timed-out call; if a |
| * call times out, then a timeout error reply is received. If you cancel the |
| * call, no reply is received unless the the reply was already received before |
| * you cancelled. |
| */ |
| void cancel(); |
| |
| /*! |
| * \brief Block until the pending call is completed. |
| * |
| * The blocking is as with Connection::send_blocking(); it |
| * does not enter the main loop or process other messages, it simply waits for |
| * the reply in question. |
| * |
| * If the pending call is already completed, this function returns immediately. |
| */ |
| void block(); |
| |
| /*! |
| * \brief Stores a pointer on a PendingCall, along with an optional function to |
| * be used for freeing the data when the data is set again, or when the |
| * pending call is finalized. |
| * |
| * The slot is allocated automatically. |
| * |
| * \param data The data to store. |
| * \throw ErrorNoMemory |
| */ |
| void data( void* data ); |
| |
| /*! |
| * \brief Retrieves data previously set with dbus_pending_call_set_data(). |
| * |
| * The slot must still be allocated (must not have been freed). |
| * |
| * \return The data, or NULL if not found. |
| */ |
| void *data(); |
| |
| /*! |
| * \return The reply handler slot. |
| */ |
| AsyncReplyHandler& reply_handler(); |
| |
| /*! |
| * \brief Sets a callback to handle an asynchronous reply to a method |
| * invocation. |
| * |
| * If the pending call has not been cancelled, the supplied callback will |
| * be invoked when a reply is received. The callback is a templated |
| * class, where the two template arguments are the type of the single |
| * argument taken by the handler function, and the return type of that |
| * function. |
| * |
| * \param handler The callback. |
| */ |
| void reply_handler(const AsyncReplyHandler& handler); |
| |
| /*! |
| * \brief Gets the reply message |
| * |
| * Ownership of the reply message passes to the caller. This function can only |
| * be called once per pending call, since the reply message is tranferred to |
| * the caller. |
| * |
| * \return The reply Message. |
| * \throw ErrorNoReply |
| */ |
| Message steal_reply(); |
| |
| private: |
| |
| RefPtrI<Private> _pvt; |
| |
| friend struct Private; |
| friend class Connection; |
| }; |
| |
| } /* namespace DBus */ |
| |
| #endif//__DBUSXX_PENDING_CALL_H |