Exemplo n.º 1
0
            private bool NextYieldInternal()
            {
                if (_stopAndCancel)
                {
                    return(false);
                }

                _currentCallAgainRequest = null;
                _enumeratorStackChanged  = false;

                if (_task != null)
                {
                    if (!_task.IsCompleted)
                    {
                        return(true);
                    }

                    _task = null;
                }

                try
                {
                    IEnumerator en = _enumerator[_enumerator.Count - 1];

                    if (en.MoveNext())
                    {
                        _yields++;

                        _current = en.Current;

                        if (_current == null)
                        {
                            return(true);
                        }

                        if (_current is string)
                        {
                            _state = _current as string;
                            return(true);
                        }

                        var enm = _current as IEnumerator;

                        if (enm != null)
                        {
                            _enumerator.Add(enm);
                            _current = null;
                            _enumeratorStackChanged = true;
                            return(true);
                        }

                        _currentCallAgainRequest = _current as CallAgain;

                        if (_currentCallAgainRequest != null)
                        {
                            if (_currentCallAgainRequest.message != null)
                            {
                                _state = _currentCallAgainRequest.message;
                            }

                            if (_currentCallAgainRequest.task != null)
                            {
                                _task = _currentCallAgainRequest.task;
                            }
                            return(true);
                        }

                        // _state = "Timed Enumerator {0} doesn't know how to process {1}".F(NameForPEGI, _current.ToString());

                        return(true);
                    }
                    else
                    {
                        if (_enumerator.Count > 1)
                        {
                            _enumerator.RemoveAt(_enumerator.Count - 1);
                            _enumeratorStackChanged = true;
                            return(true);
                        }
                    }
                }
                catch (Exception ex)
                {
                    _state = "Error after {0}: {1}".F(_state, ex.ToString());

                    Debug.LogError("Managed Exception in Timed Enumerator: " + _state);

                    _task          = null;
                    _stopAndCancel = true;
                }

                return(false);
            }
Exemplo n.º 2
0
            private bool NextYieldInternal()
            {
                _currentCallAgainRequest = null;

                if (_task != null)
                {
                    if (!_task.IsCompleted)
                    {
                        return(true);
                    }

                    _task = null;
                }

                try
                {
                    IEnumerator en = _enumerator[_enumerator.Count - 1];

                    if (en.MoveNext())
                    {
                        _yields++;

                        _current = en.Current;

                        if (_current is string)
                        {
                            _state = _current as string;
                        }
                        else
                        {
                            _currentCallAgainRequest = _current as CallAgain;

                            if (_currentCallAgainRequest != null)
                            {
                                if (_currentCallAgainRequest.message != null)
                                {
                                    _state = _currentCallAgainRequest.message;
                                }

                                if (_currentCallAgainRequest.task != null)
                                {
                                    _task = _currentCallAgainRequest.task;
                                    // Debug.LogError("Found nested tesk");
                                }

                                /* if (_currentCallAgainRequest.returnData != null)
                                 * {
                                 *   returnedData = _currentCallAgainRequest.returnData;
                                 * }*/
                            }
                            else
                            {
                                if (_current is IEnumerator)
                                {
                                    _enumerator.Add(_current as IEnumerator);
                                    //  Debug.LogError("Found nested IEnumerator: {0}".F(_current.ToString()));
                                    _current = null;
                                }
                            }
                        }

                        return(true);
                    }
                    else
                    {
                        if (_enumerator.Count > 1)
                        {
                            _enumerator.RemoveAt(_enumerator.Count - 1);
                            return(true);
                        }
                    }
                }
                catch (Exception ex)
                {
                    _state = "Error after {0}: {1}".F(_state, ex.ToString());

                    Debug.LogError("Managed Exception in Timed Enumerator: " + _state);

                    _task          = null;
                    _stopAndCancel = true;
                    StoppedOnError = true;
                }

                return(false);
            }