Mercurial > cpython-lru_cache-weakref
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 |
| rev | line source |
|---|---|
| 1157 | 1 # Remote nusers client interface |
| 2 | |
| 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 | 5 |
| 6 | |
| 7 class RnusersPacker(Packer): | |
| 8 def pack_utmp(self, ui): | |
| 9 ut_line, ut_name, ut_host, ut_time = utmp | |
| 10 self.pack_string(ut_line) | |
| 11 self.pack_string(ut_name) | |
| 12 self.pack_string(ut_host) | |
| 13 self.pack_int(ut_time) | |
| 14 def pack_utmpidle(self, ui): | |
| 15 ui_itmp, ui_idle = ui | |
| 16 self.pack_utmp(ui_utmp) | |
| 17 self.pack_uint(ui_idle) | |
| 18 def pack_utmpidlearr(self, list): | |
| 19 self.pack_array(list, self.pack_itmpidle) | |
| 20 | |
| 21 | |
| 22 class RnusersUnpacker(Unpacker): | |
| 23 def unpack_utmp(self): | |
| 24 ut_line = self.unpack_string() | |
| 25 ut_name = self.unpack_string() | |
| 26 ut_host = self.unpack_string() | |
| 27 ut_time = self.unpack_int() | |
| 28 return ut_line, ut_name, ut_host, ut_time | |
| 29 def unpack_utmpidle(self): | |
| 30 ui_utmp = self.unpack_utmp() | |
| 31 ui_idle = self.unpack_uint() | |
| 32 return ui_utmp, ui_idle | |
| 33 def unpack_utmpidlearr(self): | |
| 34 return self.unpack_array(self.unpack_utmpidle) | |
| 35 | |
| 36 | |
|
1162
fac62bcd3bb8
Full broadcast support
Guido van Rossum <guido@python.org>
parents:
1157
diff
changeset
|
37 class PartialRnusersClient: |
| 1157 | 38 |
| 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 | 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 | 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 | 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 | 65 |
| 66 | |
| 67 def test(): | |
| 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 | 75 list = c.Names() |
| 76 for (line, name, host, time), idle in list: | |
| 77 line = strip0(line) | |
| 78 name = strip0(name) | |
| 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() |
