Added broadcast example
This commit is contained in:
		
							parent
							
								
									14784d2c01
								
							
						
					
					
						commit
						eb2e4a86bd
					
				
							
								
								
									
										93
									
								
								Examples/Broadcast.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								Examples/Broadcast.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,93 @@ | ||||
| ########################################################## | ||||
| # This RNS example demonstrates broadcasting unencrypted # | ||||
| # information to any listening destinations.             # | ||||
| ########################################################## | ||||
| 
 | ||||
| import sys | ||||
| import argparse | ||||
| import RNS | ||||
| 
 | ||||
| # Let's define an app name. We'll use this for all | ||||
| # destinations we create. Since this basic example | ||||
| # is part of a range of example utilities, we'll put | ||||
| # them all within the app namespace "example_utilities" | ||||
| APP_NAME = "example_utilitites" | ||||
| 
 | ||||
| # This initialisation is executed when the program is started | ||||
| def program_setup(configpath, channel=None): | ||||
| 	# We must first initialise Reticulum | ||||
| 	reticulum = RNS.Reticulum(configpath) | ||||
| 	 | ||||
| 	# If the user did not select a "channel" we use | ||||
| 	# a default one called "public_information". | ||||
| 	# This "channel" is added to the destination name- | ||||
| 	# space, so the user can select different broadcast | ||||
| 	# channels. | ||||
| 	if channel == None: | ||||
| 		channel = "public_information" | ||||
| 
 | ||||
| 	# We create a PLAIN destination. This is an uncencrypted endpoint | ||||
| 	# that anyone can listen to and send information to. | ||||
| 	broadcast_destination = RNS.Destination(None, RNS.Destination.IN, RNS.Destination.PLAIN, APP_NAME, "broadcast", channel) | ||||
| 
 | ||||
| 	# We specify a callback that will get called every time | ||||
| 	# the destination receives data. | ||||
| 	broadcast_destination.packet_callback(packet_callback) | ||||
| 	 | ||||
| 	# Everything's ready! | ||||
| 	# Let's hand over control to the main loop | ||||
| 	broadcastLoop(broadcast_destination) | ||||
| 
 | ||||
| def packet_callback(data, packet): | ||||
| 	# Simply print out the received data | ||||
| 	print("") | ||||
| 	print("Received data: "+data.decode("utf-8")+"\r\n> ", end="") | ||||
| 	sys.stdout.flush() | ||||
| 
 | ||||
| def broadcastLoop(destination): | ||||
| 	# Let the user know that everything is ready | ||||
| 	RNS.log("Broadcast example "+RNS.prettyhexrep(destination.hash)+" running, enter text and hit enter to broadcast (Ctrl-C to quit)") | ||||
| 
 | ||||
| 	# We enter a loop that runs until the users exits. | ||||
| 	# If the user hits enter, we will send the information | ||||
| 	# that the user entered into the prompt. | ||||
| 	while True: | ||||
| 		print("> ", end="") | ||||
| 		entered = input() | ||||
| 
 | ||||
| 		if entered != "": | ||||
| 			data    = entered.encode("utf-8") | ||||
| 			packet  = RNS.Packet(destination, data) | ||||
| 			packet.send() | ||||
| 
 | ||||
| 		 | ||||
| 
 | ||||
| ########################################################## | ||||
| #### Program Startup ##################################### | ||||
| ########################################################## | ||||
| 
 | ||||
| # This part of the program gets run at startup, | ||||
| # and parses input from the user, and then starts | ||||
| # the program. | ||||
| if __name__ == "__main__": | ||||
| 	try: | ||||
| 		parser = argparse.ArgumentParser(description="Reticulum example that demonstrates sending and receiving unencrypted broadcasts") | ||||
| 		parser.add_argument("--config", action="store", default=None, help="path to alternative Reticulum config directory", type=str) | ||||
| 		parser.add_argument("--channel", action="store", default=None, help="path to alternative Reticulum config directory", type=str) | ||||
| 		args = parser.parse_args() | ||||
| 
 | ||||
| 		if args.config: | ||||
| 			configarg = args.config | ||||
| 		else: | ||||
| 			configarg = None | ||||
| 
 | ||||
| 		if args.channel: | ||||
| 			channelarg = args.channel | ||||
| 		else: | ||||
| 			channelarg = None | ||||
| 
 | ||||
| 		program_setup(configarg, channelarg) | ||||
| 
 | ||||
| 	except KeyboardInterrupt: | ||||
| 		print("") | ||||
| 		exit() | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user