
from Selecting.SelectManager import SelectManager
from Selecting.EventQueue import EventQueue
from ClientEvent import EventReceiver
from ClientProtocol import UndefProto
from Queue import Empty
import ClientDefaults

class SocketEvent (EventReceiver):
	def __init__(s, cevq, selector):
		s.cevq = cevq
		s.selector = selector
		EventReceiver.__init__(s, cevq)

	def init(s):
		s.eventhandlers = {}
		proto = UndefProto(s.cevq, s.selector, s)

	def activate(s):
		try:
			ev = s.queue.get(0)			# don't block
		except Empty:
			return
		s.proto.recv_event(ev)
		
	def run(s):
		while 1:
			print "Going into select loop..."
			s.selector.loop()
	
	def reg_proto(s, proto):
		print "Registering new protocol %s" % proto
		s.proto = proto
		s.eventhandlers = proto.eventhandlers
		s.reg_self()
	
class Connection:
	def __init__(s, cevq):
		s.cevq = cevq					# client event queue
		s.evq = EventQueue()
		s.selector = SelectManager(s.evq)
		s.sev = SocketEvent(s.cevq, s.selector)
		s.evq.add_persistent(s.sev, ClientDefaults.PollInterval)

	def start(s):
		s.sev.start()
