Updated Echo example
This commit is contained in:
		
							parent
							
								
									db13ad08a9
								
							
						
					
					
						commit
						7d6de5f754
					
				| @ -71,7 +71,7 @@ def server_callback(message, packet): | |||||||
| 
 | 
 | ||||||
| # This initialisation is executed when the users chooses | # This initialisation is executed when the users chooses | ||||||
| # to run as a client | # to run as a client | ||||||
| def client(destination_hexhash, configpath): | def client(destination_hexhash, configpath, timeout=None): | ||||||
| 	# We need a binary representation of the destination | 	# We need a binary representation of the destination | ||||||
| 	# hash that was entered on the command line | 	# hash that was entered on the command line | ||||||
| 	try: | 	try: | ||||||
| @ -124,6 +124,14 @@ def client(destination_hexhash, configpath): | |||||||
| 			# sent, it will return a PacketReceipt instance. | 			# sent, it will return a PacketReceipt instance. | ||||||
| 			packet_receipt = echo_request.send() | 			packet_receipt = echo_request.send() | ||||||
| 
 | 
 | ||||||
|  | 			# If the user specified a timeout, we set this | ||||||
|  | 			# timeout on the packet receipt, and configure | ||||||
|  | 			# a callback function, that will get called if | ||||||
|  | 			# the packet times out. | ||||||
|  | 			if timeout != None: | ||||||
|  | 				packet_receipt.setTimeout(timeout) | ||||||
|  | 				packet_receipt.timeout_callback(packet_timed_out) | ||||||
|  | 
 | ||||||
| 			# We can then set a delivery callback on the receipt. | 			# We can then set a delivery callback on the receipt. | ||||||
| 			# This will get automatically called when a proof for | 			# This will get automatically called when a proof for | ||||||
| 			# this specific packet is received from the destination. | 			# this specific packet is received from the destination. | ||||||
| @ -136,7 +144,7 @@ def client(destination_hexhash, configpath): | |||||||
| 			# user to wait for an announce to arrive. | 			# user to wait for an announce to arrive. | ||||||
| 			RNS.log("Destination is not yet known. Wait for an announce to arrive and try again.") | 			RNS.log("Destination is not yet known. Wait for an announce to arrive and try again.") | ||||||
| 
 | 
 | ||||||
| # This method is called when our reply destination | # This function is called when our reply destination | ||||||
| # receives a proof packet. | # receives a proof packet. | ||||||
| def packet_delivered(receipt): | def packet_delivered(receipt): | ||||||
| 	if receipt.status == RNS.PacketReceipt.DELIVERED: | 	if receipt.status == RNS.PacketReceipt.DELIVERED: | ||||||
| @ -150,6 +158,10 @@ def packet_delivered(receipt): | |||||||
| 
 | 
 | ||||||
| 		RNS.log("Valid reply received from "+RNS.prettyhexrep(receipt.destination.hash)+", round-trip time is "+rttstring) | 		RNS.log("Valid reply received from "+RNS.prettyhexrep(receipt.destination.hash)+", round-trip time is "+rttstring) | ||||||
| 
 | 
 | ||||||
|  | # This function is called if a packet times out. | ||||||
|  | def packet_timed_out(receipt): | ||||||
|  | 	if receipt.status == RNS.PacketReceipt.FAILED: | ||||||
|  | 		RNS.log("Packet "+RNS.prettyhexrep(receipt.hash)+" timed out") | ||||||
| 
 | 
 | ||||||
| if __name__ == "__main__": | if __name__ == "__main__": | ||||||
| 	# Set up command line arguments and start | 	# Set up command line arguments and start | ||||||
| @ -158,6 +170,7 @@ if __name__ == "__main__": | |||||||
| 		parser = argparse.ArgumentParser(description="Simple echo server and client utility") | 		parser = argparse.ArgumentParser(description="Simple echo server and client utility") | ||||||
| 		parser.add_argument("-s", "--server", action="store_true", help="wait for incoming packets from clients") | 		parser.add_argument("-s", "--server", action="store_true", help="wait for incoming packets from clients") | ||||||
| 		parser.add_argument("--config", action="store", default=None, help="path to alternative Reticulum config directory", type=str) | 		parser.add_argument("--config", action="store", default=None, help="path to alternative Reticulum config directory", type=str) | ||||||
|  | 		parser.add_argument("-t", "--timeout", action="store", metavar="s", default=None, help="set a reply timeout in seconds", type=float) | ||||||
| 		parser.add_argument("destination", nargs="?", default=None, help="hexadecimal hash of the server destination", type=str) | 		parser.add_argument("destination", nargs="?", default=None, help="hexadecimal hash of the server destination", type=str) | ||||||
| 		args = parser.parse_args() | 		args = parser.parse_args() | ||||||
| 
 | 
 | ||||||
| @ -167,14 +180,22 @@ if __name__ == "__main__": | |||||||
| 				configarg = args.config | 				configarg = args.config | ||||||
| 			server(configarg) | 			server(configarg) | ||||||
| 		else: | 		else: | ||||||
| 			configarg=None |  | ||||||
| 			if args.config: | 			if args.config: | ||||||
| 				configarg = args.config | 				configarg = args.config | ||||||
|  | 			else: | ||||||
|  | 				configarg = None | ||||||
|  | 
 | ||||||
|  | 			if args.timeout: | ||||||
|  | 				timeoutarg = float(args.timeout) | ||||||
|  | 			else: | ||||||
|  | 				timeoutarg = None | ||||||
|  | 
 | ||||||
| 			if (args.destination == None): | 			if (args.destination == None): | ||||||
| 				print("") | 				print("") | ||||||
| 				parser.print_help() | 				parser.print_help() | ||||||
| 				print("") | 				print("") | ||||||
| 			else: | 			else: | ||||||
| 				client(args.destination, configarg) | 				client(args.destination, configarg, timeout=timeoutarg) | ||||||
| 	except KeyboardInterrupt: | 	except KeyboardInterrupt: | ||||||
|  | 		print("") | ||||||
| 		exit() | 		exit() | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user