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 }