summaryrefslogtreecommitdiffstats
path: root/Demo/rpc/rnusersclient.py
blob: ed81081aa42df71ba136f3fa806c8ec2765168a6 (plain)
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# Remote nusers client interface

import rpc
from rpc import Packer, Unpacker, TCPClient, UDPClient


class RnusersPacker(Packer):
	def pack_utmp(self, ui):
		ut_line, ut_name, ut_host, ut_time = utmp
		self.pack_string(ut_line)
		self.pack_string(ut_name)
		self.pack_string(ut_host)
		self.pack_int(ut_time)
	def pack_utmpidle(self, ui):
		ui_itmp, ui_idle = ui
		self.pack_utmp(ui_utmp)
		self.pack_uint(ui_idle)
	def pack_utmpidlearr(self, list):
		self.pack_array(list, self.pack_itmpidle)


class RnusersUnpacker(Unpacker):
	def unpack_utmp(self):
		ut_line = self.unpack_string()
		ut_name = self.unpack_string()
		ut_host = self.unpack_string()
		ut_time = self.unpack_int()
		return ut_line, ut_name, ut_host, ut_time
	def unpack_utmpidle(self):
		ui_utmp = self.unpack_utmp()
		ui_idle = self.unpack_uint()
		return ui_utmp, ui_idle
	def unpack_utmpidlearr(self):
		return self.unpack_array(self.unpack_utmpidle)


class RnusersClient(UDPClient):

	def addpackers(self):
		self.packer = RnusersPacker().init()
		self.unpacker = RnusersUnpacker().init('')

	def init(self, host):
		return UDPClient.init(self, host, 100002, 2)

	def Num(self):
		self.start_call(1)
		self.do_call()
		n = self.unpacker.unpack_int()
		self.end_call()
		return n

	def Names(self):
		self.start_call(2)
		self.do_call()
		list = self.unpacker.unpack_utmpidlearr()
		self.end_call()
		return list

	def Allnames(self):
		self.start_call(3)
		self.do_call()
		list = self.unpacker.unpack_utmpidlearr()
		self.end_call()
		return list


def test():
	import sys
	host = ''
	if sys.argv[1:]: host = sys.argv[1]
	c = RnusersClient().init(host)
	list = c.Names()
	def strip0(s):
		while s and s[-1] == '\0': s = s[:-1]
		return s
	for (line, name, host, time), idle in list:
		line = strip0(line)
		name = strip0(name)
		host = strip0(host)
		print name, host, line, time, idle