1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 """
36 Convience methods for manipulating XML-RPC APIs
37 """
38
39 import socket
40 import xmlrpclib
41
42 import roslib.network
43 import roslib.scriptutil
44
45 _ID = '/roslaunch_netapi'
47 """
48 @return: list of roslaunch XML-RPC URIs for roscore that's in
49 the current environment, or None if roscore cannot be contacted.
50 @rtype: [str]
51 """
52 try:
53 param_server = roslib.scriptutil.get_param_server()
54 code, msg, vals = param_server.getParam(_ID, '/roslaunch/uris')
55 if code == 1 and vals:
56 return vals.values()
57 except socket.error: pass
58 return None
59
61 - def __init__(self, name, respawn_count, is_alive, roslaunch_uri):
62 self.is_alive = is_alive
63 self.respawn_count = respawn_count
64 self.name = name
65
66 self.roslaunch_uri = roslaunch_uri
67 self.machine, _ = roslib.network.parse_http_host_and_port(roslaunch_uri)
68
70 """
71 @param roslaunch_uris: (optional) list of XML-RPCS. If none
72 are provided, will look up URIs dynamically
73 @type roslaunch_uris: [str]
74 @return: list of roslaunch processes
75 @rtype: [L{NetProcess}]
76 """
77 if not roslaunch_uris:
78 roslaunch_uris = get_roslaunch_uris()
79 if not roslaunch_uris:
80 return []
81
82 procs = []
83 for uri in roslaunch_uris:
84 try:
85 r = xmlrpclib.ServerProxy(uri)
86 code, msg, val = r.list_processes()
87 if code == 1:
88 active, dead = val
89 procs.extend([NetProcess(a[0], a[1], True, uri) for a in active])
90 procs.extend([NetProcess(d[0], d[1], False, uri) for d in dead])
91 except:
92
93
94
95 pass
96 return procs
97
98 if __name__ == "__main__":
99 import roslib; roslib.load_manifest('roslaunch')
100 print list_processes()
101 print "done"
102