from framestate import FrameState
import Queue

class InChannel(object):
    """ container for events from the client

        use 'add_event(ClientEvent instance)' to add an event to the FIFO,
        'pop_state()' to get a FrameState instance from the stored events and
        clear the FIFO
    """
    def __init__(self):
        self._events = Queue.Queue()
        self._prevstate = None

    def add_event(self, event):
        self._events.put(event)

    def pop_state(self):
        s = FrameState(self._prevstate)
        while not self._events.empty():
            e = self._events.get()
            s.process_event(e)
        self._prevstate = s
        return s


