WvStreams
wvdbus.cc
1/* -*- Mode: C++ -*-
2 * Worldvisions Weaver Software:
3 * Copyright (C) 2004-2006 Net Integration Technologies, Inc.
4 *
5 * Really basic D-Bus test program.
6 *
7 */
8#include "wvargs.h"
9#include "wvdbusconn.h"
10#include "wvistreamlist.h"
11#include "wvlinkerhack.h"
12
13WV_LINK_TO(WvTCPConn);
14
15static WvStringList paths;
16
17static bool incoming(WvDBusMsg &msg)
18{
19 WvStringList::Iter i(paths);
20 for (i.rewind(); i.next(); )
21 {
22 if (*i == msg.get_path())
23 {
24 fprintf(stderr, "\n * %s\n\n", ((WvString)msg).cstr());
25 return true;
26 }
27 }
28 return false;
29}
30
31
32int main(int argc, char *argv[])
33{
34 WvArgs args;
35 WvString moniker("dbus:session");
36 WvStringList names, remaining_args;
37 bool sigtest = false, methtest = false, wait = false;
38
39 // args.add_optional_arg("COMMANDS", true);
40 args.add_option('m', "moniker", "Specify the dbus bus to use",
41 "MONIKER", moniker);
42 args.add_option('p', "path", "Listen on <path>",
43 "PATH", paths);
44 args.add_option('n', "name", "Register as <name>",
45 "NAME", names);
46 args.add_set_bool_option('S', "signaltest", "Send a test signal", sigtest);
47 args.add_set_bool_option('M', "methodtest", "Call test method", methtest);
48 args.add_set_bool_option('w', "wait", "Wait forever", wait);
49 args.process(argc, argv, &remaining_args);
50
51 WvDBusConn conn(moniker);
52 WvIStreamList::globallist.append(&conn, false, "wvdbus conn");
53
54 conn.add_callback(WvDBusConn::PriNormal, incoming);
55
56 WvStringList::Iter i(names);
57 for (i.rewind(); i.next(); )
58 conn.request_name(*i);
59
60 if (sigtest)
61 WvDBusSignal("/ca/nit/foo", "ca.nit.foo", "BarSignal").send(conn);
62
63 if (methtest)
64 {
65 WvDBusMsg("ca.nit.MyListener", "/ca/nit/foo",
66 "ca.nit.foo", "BarMethod")
67 .append("bee").send(conn);
68 }
69
70 while (conn.isok() && (wait || !conn.isidle()))
71 WvIStreamList::globallist.runonce();
72 return 0;
73}
WvArgs - Sane command-line argument processing for WvStreams.
Definition: wvargs.h:62
bool process(int argc, char **argv, WvStringList *remaining_args=NULL)
Process the command line arguments passed to main() using the options provided through calls to add_o...
Definition: wvargs.cc:784
void add_option(char short_option, WvStringParm long_option, WvStringParm desc, WvStringParm arg_desc, int &val)
Add a switch that takes an integer argument.
Definition: wvargs.cc:888
void add_set_bool_option(char short_option, WvStringParm long_option, WvStringParm desc, bool &val)
Add a boolean option, which, when specified, sets the specified boolean variable to true.
Definition: wvargs.cc:856
void send(WvDBusConn &conn)
A shortcut for sending this message on the given connection.
Definition: wvdbusmsg.cc:641
WvDBusMsg & append(const char *s)
The following methods are designed to allow appending various arguments to the message.
Definition: wvdbusmsg.cc:461
void runonce(time_t msec_timeout=-1)
Exactly the same as: if (select(timeout)) callback();.
Definition: wvstream.h:391
This is a WvList of WvStrings, and is a really handy way to parse strings.
Definition: wvstringlist.h:28
WvString is an implementation of a simple and efficient printable-string class.
Definition: wvstring.h:330
WvTCPConn tries to make all outgoing connections asynchronously (in the background).
Definition: wvtcp.h:40