annotate Demo/rpc/rnusersclient.py @ 5817:48b94de85bf3 legacy-trunk

Extensive changes by AMK.
author Guido van Rossum <guido@python.org>
date Thu, 17 Jul 1997 16:29:42 +0000
parents f7a752fb7b73
children 71a294bd7950
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1157
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 # Remote nusers client interface
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 import rpc
1162
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
4 from rpc import Packer, Unpacker, UDPClient, BroadcastUDPClient
1157
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
5
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 class RnusersPacker(Packer):
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 def pack_utmp(self, ui):
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 ut_line, ut_name, ut_host, ut_time = utmp
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 self.pack_string(ut_line)
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 self.pack_string(ut_name)
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 self.pack_string(ut_host)
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 self.pack_int(ut_time)
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 def pack_utmpidle(self, ui):
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 ui_itmp, ui_idle = ui
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 self.pack_utmp(ui_utmp)
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 self.pack_uint(ui_idle)
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 def pack_utmpidlearr(self, list):
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 self.pack_array(list, self.pack_itmpidle)
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
20
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
21
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 class RnusersUnpacker(Unpacker):
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 def unpack_utmp(self):
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 ut_line = self.unpack_string()
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 ut_name = self.unpack_string()
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 ut_host = self.unpack_string()
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 ut_time = self.unpack_int()
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 return ut_line, ut_name, ut_host, ut_time
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 def unpack_utmpidle(self):
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 ui_utmp = self.unpack_utmp()
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 ui_idle = self.unpack_uint()
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 return ui_utmp, ui_idle
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 def unpack_utmpidlearr(self):
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 return self.unpack_array(self.unpack_utmpidle)
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
36
1162
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
37 class PartialRnusersClient:
1157
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
38
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 def addpackers(self):
1428
f7a752fb7b73 *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 1162
diff changeset
40 self.packer = RnusersPacker()
f7a752fb7b73 *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 1162
diff changeset
41 self.unpacker = RnusersUnpacker('')
1157
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42
1162
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
43 def Num(self):
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
44 return self.make_call(1, None, None, self.unpacker.unpack_int)
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
45
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
46 def Names(self):
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
47 return self.make_call(2, None, \
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
48 None, self.unpacker.unpack_utmpidlearr)
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
49
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
50 def Allnames(self):
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
51 return self.make_call(3, None, \
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
52 None, self.unpacker.unpack_utmpidlearr)
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
53
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
54
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
55 class RnusersClient(PartialRnusersClient, UDPClient):
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
56
1428
f7a752fb7b73 *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 1162
diff changeset
57 def __init__(self, host):
f7a752fb7b73 *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 1162
diff changeset
58 UDPClient.__init__(self, host, 100002, 2)
1157
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
59
1162
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
60
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
61 class BroadcastRnusersClient(PartialRnusersClient, BroadcastUDPClient):
1157
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
62
1428
f7a752fb7b73 *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 1162
diff changeset
63 def __init__(self, bcastaddr):
f7a752fb7b73 *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 1162
diff changeset
64 BroadcastUDPClient.__init__(self, bcastaddr, 100002, 2)
1157
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
65
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
66
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 def test():
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 import sys
1162
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
69 if not sys.argv[1:]:
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
70 testbcast()
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
71 return
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
72 else:
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
73 host = sys.argv[1]
1428
f7a752fb7b73 *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 1162
diff changeset
74 c = RnusersClient(host)
1157
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
75 list = c.Names()
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
76 for (line, name, host, time), idle in list:
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 line = strip0(line)
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
78 name = strip0(name)
f0eb77abf244 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
79 host = strip0(host)
1162
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
80 print `name`, `host`, `line`, time, idle
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
81
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
82 def testbcast():
1428
f7a752fb7b73 *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 1162
diff changeset
83 c = BroadcastRnusersClient('<broadcast>')
1162
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
84 def listit(list, fromaddr):
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
85 host, port = fromaddr
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
86 print host + '\t:',
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
87 for (line, name, host, time), idle in list:
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
88 print strip0(name),
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
89 print
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
90 c.set_reply_handler(listit)
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
91 all = c.Names()
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
92 print 'Total Count:', len(all)
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
93
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
94 def strip0(s):
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
95 while s and s[-1] == '\0': s = s[:-1]
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
96 return s
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
97
fac62bcd3bb8 Full broadcast support
Guido van Rossum <guido@python.org>
parents: 1157
diff changeset
98 test()