private void OnPlayerEvent(PlayerEventArgs args)
        {
            switch (args.Event)
            {
            case PlayerEvent.StartOfStream:
                consecutive_errors = 0;
                break;

            case PlayerEvent.EndOfStream:
                EosTransition();
                break;

            case PlayerEvent.Error:
                if (++consecutive_errors >= 5)
                {
                    consecutive_errors = 0;
                    player_engine.Close(false);
                    OnStopped();
                    break;
                }

                CancelErrorTransition();
                // TODO why is this so long? any reason not to be instantaneous?
                Application.RunTimeout(250, EosTransition);
                break;

            case PlayerEvent.StateChange:
                if (((PlayerEventStateChangeArgs)args).Current != PlayerState.Loading)
                {
                    break;
                }

                TrackInfo track = player_engine.CurrentTrack;
                if (changing_to_track != track && track != null)
                {
                    CurrentTrack = track;
                }

                changing_to_track = null;

                if (!raise_started_after_transition)
                {
                    transition_track_started = false;
                    OnTrackStarted();
                }
                else
                {
                    transition_track_started = true;
                }
                break;
            }
        }
Esempio n. 2
0
 public void Stop()
 {
     engine_service.Close();
 }