The event stream implementation, on the other hand, is the most complex in our framework. We'll tackle it gradually, implementing it and experimenting as we go.
First, let's look at our main constructor function, event-stream:
(defn event-stream "Creates and returns a new event stream. You can optionally provide an existing core.async channel as the source for the new stream" ([] (event-stream (chan))) ([ch] (let [multiple (mult ch) completed (atom false)] (EventStream. ch multiple completed))))
The docstring should be sufficient to understand the public API. What might not be clear, however, is what all the constructor arguments mean. From left to right, the arguments to EventStream are as follows:
- ch: This is ...