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 
13 WV_LINK_TO(WvTCPConn);
14 
15 static WvStringList paths;
16 
17 static 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 
32 int 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 }
WvDBusMsg::send
void send(WvDBusConn &conn)
A shortcut for sending this message on the given connection.
Definition: wvdbusmsg.cc:641
WvArgs::add_option
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
WvStream::runonce
void runonce(time_t msec_timeout=-1)
Exactly the same as: if (select(timeout)) callback();.
Definition: wvstream.h:391
WvArgs::add_set_bool_option
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
WvDBusMsg::append
WvDBusMsg & append(const char *s)
The following methods are designed to allow appending various arguments to the message.
Definition: wvdbusmsg.cc:461
WvDBusSignal
Definition: wvdbusmsg.h:291
WvDBusMsg
Definition: wvdbusmsg.h:28
WvTCPConn
WvTCPConn tries to make all outgoing connections asynchronously (in the background).
Definition: wvtcp.h:39
WvString
WvString is an implementation of a simple and efficient printable-string class.
Definition: wvstring.h:329
WvArgs
WvArgs - Sane command-line argument processing for WvStreams.
Definition: wvargs.h:61
WvArgs::process
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
WvStringList
This is a WvList of WvStrings, and is a really handy way to parse strings.
Definition: wvstringlist.h:27
WvDBusConn
Definition: wvdbusconn.h:65