mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	Initial revision
This commit is contained in:
		
							parent
							
								
									6252229170
								
							
						
					
					
						commit
						cdd04cad5c
					
				
					 1 changed files with 81 additions and 0 deletions
				
			
		
							
								
								
									
										81
									
								
								Demo/rpc/rnusersclient.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								Demo/rpc/rnusersclient.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,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
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue