Typical event flow through the ECS is from a threaded source, through an implicit threaded adapter (which is unseen on the GUI or in the ECA, but which provides an additional event buffering layer between sources and filter stacks), into a threaded filter stack(s) to an output destination, which is threaded and able to handle communication delays with external devices because of its contained queue.
The threaded event processor consists of a processing thread and a large queue, which implements the producer/consumer design pattern. Events are received by an object via submit() from a predecessor, pulled off its queue, processed, and sent on to a destination as rapidly as possible. There are four flavors of event processors:
com.eventgnosis.system.SynchronousEventProcessor
):com.eventgnosis.system.ThreadedEventProcessor
):SystemObjects
cannot submit to this type of object.
A SystemObject
contains an EventProcessor iff (if and only if) the object processes events. Examples of SystemObjects
that do not process events are the root RuntimeController and its children, the managers for the various System Object categories.