/* qdbusconnection_p.h TQT_DBusConnection private object * * Copyright (C) 2005 Harald Fernengel * Copyright (C) 2005 Kevin Krammer * * Licensed under the Academic Free License version 2.1 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA. * */ // // W A R N I N G // ------------- // // This file is not part of the public API. This header file may // change from version to version without notice, or even be // removed. // // We mean it. // // #ifndef TQDBUSCONNECTION_P_H #define TQDBUSCONNECTION_P_H #include #include #include #include #include #include "tqdbusatomic.h" #include "tqdbuserror.h" #include "tqdbusobject.h" #include "tqdbusmessage.h" class TQT_DBusMessage; class TQSocketNotifier; class TQTimer; class TQTimerEvent; struct DBusConnection; struct DBusServer; class TQT_DBusResultInfo { public: TQT_DBusMessage message; TQObject* receiver; TQCString method; }; typedef TQValueList TQT_DBusResultInfoList; class TQT_DBusConnectionPrivate: public TQObject { Q_OBJECT TQ_OBJECT public: TQT_DBusConnectionPrivate(TQObject *parent = 0); ~TQT_DBusConnectionPrivate(); void bindToApplication(); void setConnection(DBusConnection *connection); void setServer(DBusServer *server); void closeConnection(); void timerEvent(TQTimerEvent *e); bool handleSignal(DBusMessage *msg); bool handleObjectCall(DBusMessage *message); bool handleError(); void emitPendingCallReply(const TQT_DBusMessage& message); signals: void dbusSignal(const TQT_DBusMessage& message); void dbusPendingCallReply(const TQT_DBusMessage& message); public slots: void socketRead(int); void socketWrite(int); void objectDestroyed(TQObject* object); void purgeRemovedWatches(); void scheduleDispatch(); void dispatch(); public: DBusError error; TQT_DBusError lastError; enum ConnectionMode { InvalidMode, ServerMode, ClientMode }; // FIXME TQAtomic ref; Atomic ref; ConnectionMode mode; DBusConnection *connection; DBusServer *server; TQTimer* dispatcher; static int messageMetaType; static int registerMessageMetaType(); int sendWithReplyAsync(const TQT_DBusMessage &message, TQObject *receiver, const char *method); void flush(); struct Watcher { Watcher(): watch(0), read(0), write(0) {} DBusWatch *watch; TQSocketNotifier *read; TQSocketNotifier *write; }; // FIXME typedef TQMultiHash WatcherHash; typedef TQValueList WatcherList; WatcherList removedWatches; typedef TQMap WatcherHash; WatcherHash watchers; // FIXME typedef TQHash TimeoutHash; typedef TQMap TimeoutHash; TimeoutHash timeouts; typedef TQMap ObjectMap; ObjectMap registeredObjects; TQValueList pendingTimeouts; struct TQT_DBusPendingCall { TQGuardedPtr receiver; TQCString method; DBusPendingCall *pending; }; typedef TQMap PendingCallMap; PendingCallMap pendingCalls; typedef TQValueList PendingMessagesForEmit; PendingMessagesForEmit pendingMessages; bool inDispatch; TQT_DBusResultInfoList m_resultEmissionQueue; public: void newMethodInResultEmissionQueue(); private slots: void transmitResultEmissionQueue(); void transmitMessageEmissionQueue(); private: TQTimer* m_resultEmissionQueueTimer; TQTimer* m_messageEmissionQueueTimer; }; #endif