Example #1
0
        public override void handleNext(_EventDispatch <T> dispatch)
        {
            if (_iterator == null)
            {
                throw new Exception("No events pending.");
            }

            bool?hasMore = null;

            try {
                hasMore = _iterator.MoveNext();
                if (hasMore ?? false)
                {
                    dispatch._sendData(_iterator.Current);
                }
                else
                {
                    _iterator = null;
                    dispatch._sendDone();
                }
            }
            catch (Exception e) {
                if (hasMore == null)
                {
                    // Threw in .moveNext().
                    // Ensure that we send a done afterwards.
                    _iterator = Enumerable.Empty <T>().GetEnumerator(); // new EmptyIterator<Null>();
                    dispatch._sendError(e, e.StackTrace);
                }
                else
                {
                    // Threw in .current.
                    dispatch._sendError(e, e.StackTrace);
                }
            }
        }
Example #2
0
 public override void perform(_EventDispatch <T> dispatch)
 {
     dispatch._sendDone();
 }
Example #3
0
 public override void perform(_EventDispatch <T> dispatch)
 {
     dispatch._sendData(value);
 }
Example #4
0
 public override void perform(_EventDispatch <T> dispatch)
 {
     dispatch._sendError(error, stackTrace);
 }
Example #5
0
 /** Execute the delayed event on the [StreamController]. */
 public abstract void perform(_EventDispatch <T> dispatch);