Revision: 343
Author: troy.melhase
Date: Thu Dec 3 16:27:51 2009
Log: Adds iterator() method that constructs a generator for treating
incoming messages as a container.
http://code.google.com/p/ibpy/source/detail?r=343
Modified:
/trunk/ib/opt/receiver.py
=======================================
--- /trunk/ib/opt/receiver.py Wed May 14 10:31:36 2008
+++ /trunk/ib/opt/receiver.py Thu Dec 3 16:27:51 2009
@@ -11,6 +11,8 @@
# ib.opt.message module more information.
#
##
+from Queue import Queue, Empty
+
from ib.lib.overloading import overloaded
from ib.lib.logger import logger
from ib.opt.message import registry, wrapperMethods
@@ -90,6 +92,28 @@
"Handler '%s' unregistered for '%s'")
self.logger.exception(errmsg, self.key(listener), name)
+ def iterator(self, *types):
+ """ Create and return a function for iterating over messages.
+
+ @param *types zero or more message types to associate with listener
+ @return function that yields messages
+ """
+ queue = Queue()
+ closed = []
+ def messageGenerator(block=True, timeout=0.1):
+ while True:
+ try:
+ yield queue.get(block=block, timeout=timeout)
+ except (Empty, ):
+ if closed:
+ break
+ self.register(closed.append, 'ConnectionClosed')
+ if types:
+ self.register(queue.put, *types)
+ else:
+ self.registerAll(queue.put)
+ return messageGenerator
+
def register(self, listener, *types):
""" Associate listener with message types created by this Receiver.