import sys
import socket
from time import sleep
from Queue import Queue

from Channel import Channel

class PdUDPListener(Channel):
	"""
	To test this run:
	$ python PdUDPListener.py
	
	In a different terminal:
	$ nc -u 127.0.0.1 10316
	zing;
	this is my test;
	this is; another test; hello;
	"""
	def __init__(self, exitEvent, queue_type=Queue):
		listen = ("0.0.0.0", 10316)
		Channel.__init__(self)
		self.exitEvent = exitEvent
		self.create_socket(socket.AF_INET, socket.SOCK_DGRAM)
		self.bind(listen)
		self.incoming = queue_type()
	
	def Launch(self):
		while not self.exitEvent.is_set():
			self.Pump()
			sleep(0.001)
	
	def Incoming(self, data):
		self.incoming.put(data)
	
	def Connected(self):
		# ignore connect event
		pass
	
	def GetMessages(self):
		# output everything in our Queue
		messages = []
		while not self.incoming.empty():
			messages.append(self.incoming.get())
		return messages

if __name__ == "__main__":
	print PdUDPListener.__doc__
	import threading
	if float(sys.version[:3]) < 2.5:
		from asyncore import poll2 as poll
	else:
		from asyncore import poll
	try:
		p = PdUDPListener()
		threadSrv = threading.Thread(target=p.Launch)
		threadSrv.start()
		while 1:
			poll()
			all = p.GetMessages()
			if all:
				print all
			sleep(0.001)
	except KeyboardInterrupt:
		sys.exit(0)

