All pastes #431103 Raw Edit

Anonymous

public cpp v1 · immutable
·published 2007-04-09 13:27 UTC
rendered paste body
#include <stdlib.h>#include <QtDBus>#include <QCoreApplication>#include <QDebug>#include <QObject>#define DBUS_SERVICE "org.gnome.Xchat"#define DBUS_REMOTE "/org/gnome/Xchat/Remote"#define DBUS_REMOTE_CONNECTION_INTERFACE "org.gnome.Xchat.Connection"#define DBUS_REMOTE_PLUGIN_INTERFACE "org.gnome.Xchat.Plugin"#define DBUS_NAME              "org.freedesktop.DBus"#define DBUS_PATH              "/org/freedesktop/DBus"#define DBUS_INTERFACE    "org.freedesktop.DBus"uint command_id;uint server_id;class Receiver: public QObject, public QDBusContext{    Q_OBJECTpublic slots:    void test_server_cb(const QStringList &word, const QStringList &word_eol,                        uint hook_id, uint context_id)        {            if (hook_id == server_id)                qDebug() << "message:" << word_eol.at(0);        }    void test_command_cb(const QStringList &word, const QStringList &word_eol,                        uint hook_id, uint context_id)        {            if (hook_id == command_id) {                // sorry, I don't know what "proxy" is in dbus-glib here                qDebug() << "test command received:" << word_eol.at(1);            }        }    void unload_cb()        {            qDebug() << "Good bye !";            QCoreApplication::instance()->quit();        }    void name_owner_changed_callback(const QString &arg1, const QString &arg2,                                     const QString &arg3)        {            qDebug() << "Got a Signal!";            qDebug() << "Signal's args:" << arg1 << arg2 << arg3;        }};static Receiver receiver;static voidwrite_error(const char *message, const QDBusError &error){    qDebug().nospace() << message << ": " << error.message();}static QDBusAbstractInterface *get_another_dbus_proxy(){    QDBusConnection connection = QDBusConnection::sessionBus();    if (!connection.isConnected()) {        qDebug() << "Failed to get connection";        return NULL;    }    QDBusConnectionInterface *proxy = connection.interface();    receiver.connect(proxy, SIGNAL(serviceOwnerChanged(QString,QString,QString)),                     SLOT(name_owner_changed_callback(QString,QString,QString)));    qDebug() << "Signals connected...";    return proxy;}intmain(int argc, char **argv){    QCoreApplication app(argc, argv);    // WARNING: this leaks!    get_another_dbus_proxy();    QDBusConnection connection = QDBusConnection::sessionBus();    QDBusInterface *remote_object = new QDBusInterface(DBUS_SERVICE,                                                       DBUS_REMOTE,                                                       DBUS_REMOTE_CONNECTION_INTERFACE,                                                       connection);    QDBusReply<QString> reply = remote_object->call("Connect", argv[0],                                                    "example",                                                    "Example of a D-Bus client",                                                    "1.0");    QString path;    if (!reply.isValid()) {        write_error("Failed to complete Connect", reply.error());        return EXIT_FAILURE;    } else {        path = reply;    }    delete remote_object;    QDBusReply<uint> reply2;    remote_object = new QDBusInterface(DBUS_SERVICE, path,                                       DBUS_REMOTE_PLUGIN_INTERFACE, connection);    reply2 = remote_object->call("HookCommand", "test", 0, "Simple D-Bus example", 1);    if (!reply2.isValid()) {        write_error("Failed to complete HookCommand", reply2.error());        return EXIT_FAILURE;    } else {        command_id = reply2;    }    qDebug() << "Command hook id =" << command_id;    reply2 = remote_object->call("HookServer", "RAW LINE", 0, 0);    if (!reply2.isValid()) {        write_error("Failed to complete HookServer", reply2.error());        return EXIT_FAILURE;    } else {        server_id = reply2;    }    qDebug() << "Server hook id =" << server_id;    receiver.connect(remote_object, SIGNAL(CommandSignal(QStringList,QStringList,uint,uint)),                     SLOT(test_command_cb(QStringList,QStringList,uint,uint)));    receiver.connect(remote_object, SIGNAL(ServerSignal(QStringList,QStringList,uint,uint)),                     SLOT(test_server_cb(QStringList,QStringList,uint,uint)));    receiver.connect(remote_object, SIGNAL(UnloadSignal()),                     SLOT(unload_cb()));    return app.exec();}#include "example.moc"