using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Media; namespace RadioBroadcaster.Server { class MediaEngine { MediaPlayer PlayerOne = new MediaPlayer(); MediaPlayer PlayerTwo = new MediaPlayer(); Uri PlayerOneUri; Uri PlayerTwoUri; private double DefaultVolume = 0.5; /// /// Handlers for if the media either ends or completely stops playing. /// Default interval is 5s between attempts to restart. /// public void AddHandlers() { PlayerOne.MediaEnded += PlayerOne_MediaEnded; PlayerOne.MediaFailed += PlayerOne_MediaFailed; PlayerTwo.MediaEnded += PlayerTwo_MediaEnded; PlayerTwo.MediaFailed += PlayerTwo_MediaFailed; } private void PlayerTwo_MediaFailed(object sender, ExceptionEventArgs e) { LogManager.Write("Media stream 2 failed at time: " + DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString()); PlayerTwo.Close(); Thread.Sleep(5000); PlayerTwo.Open(PlayerTwoUri); PlayerTwo.Play(); } private void PlayerTwo_MediaEnded(object sender, EventArgs e) { LogManager.Write("Media stream 2 ended at time: " + DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString()); PlayerTwo.Close(); Thread.Sleep(5000); PlayerTwo.Open(PlayerTwoUri); PlayerTwo.Play(); } private void PlayerOne_MediaFailed(object sender, ExceptionEventArgs e) { LogManager.Write("Media stream 1 failed at time: " + DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString()); PlayerOne.Close(); Thread.Sleep(5000); PlayerOne.Open(PlayerOneUri); PlayerOne.Play(); } private void PlayerOne_MediaEnded(object sender, EventArgs e) { LogManager.Write("Media stream 1 ended at time: " + DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString()); PlayerOne.Close(); Thread.Sleep(5000); PlayerOne.Open(PlayerOneUri); PlayerOne.Play(); } #region States private bool One_Playing = false; private bool One_Loaded = false; private bool Two_Playing = false; private bool Two_Loaded = false; private int CurrentPrimary = 1; #endregion public Uri SetPrimaryLocation { get { if (CurrentPrimary == 1) { return PlayerOne.Source; } else { return PlayerTwo.Source; } } set { if(CurrentPrimary == 1) { PlayerOneUri = value; PlayerOne.Open(value); } else { PlayerTwoUri = value; PlayerTwo.Open(value); } } } public Uri SetSecondaryLocation { get { if (CurrentPrimary == 1) { return PlayerTwo.Source; } else { return PlayerOne.Source; } } set { if (CurrentPrimary == 1) { PlayerTwoUri = value; PlayerTwo.Open(value); } else { PlayerOneUri = value; PlayerOne.Open(value); } } } public void PlayPrimary() { if(CurrentPrimary == 1) { PlayerOne.Play(); One_Playing = true; } else { PlayerTwo.Play(); Two_Playing = true; } } public void PlaySecondary() { if (CurrentPrimary == 1) { //PlayerTwo.IsMuted = true; PlayerTwo.Play(); Two_Playing = true; } else { //PlayerOne.IsMuted = true; PlayerOne.Play(); One_Playing = true; } } public string SetPlayer1 { get { return PlayerOneUri.AbsoluteUri; } set { PlayerOneUri = new Uri(value); if (One_Playing) { PlayerOne.Open(PlayerOneUri); } } } public string SetPlayer2 { get { return PlayerTwoUri.AbsoluteUri; } set { PlayerTwoUri = new Uri(value); if (Two_Playing) { PlayerTwo.Open(PlayerTwoUri); } } } public bool IsPlayingAudio { get { if(One_Playing == false && Two_Playing == false) { return false; } else { return true; } } } public bool IsOnePlayingAudio { get { return One_Playing; } } public bool IsTwoPlayingAudio { get { return Two_Playing; } } public bool IsPrimaryLoaded { get { if(CurrentPrimary == 1) { return One_Loaded; } else { return Two_Loaded; } } } public bool IsSecondaryLoaded { get { if (CurrentPrimary == 1) { return Two_Loaded; } else { return One_Loaded; } } } public int CurrentPrimaryPlayer { get{ return CurrentPrimary; } } public double PrimaryVolume { get { if(CurrentPrimary == 1) { return PlayerOne.Volume; } else { return PlayerTwo.Volume; } } set { if(CurrentPrimary == 1) { PlayerOne.Volume = value; } else { PlayerTwo.Volume = value; } } } public double SecondaryVolume { get { if (CurrentPrimary == 1) { return PlayerTwo.Volume; } else { return PlayerOne.Volume; } } set { if (CurrentPrimary == 1) { PlayerTwo.Volume = value; } else { PlayerOne.Volume = value; } } } public double SetDefaultVolume { set { DefaultVolume = value; PrimaryVolume = value; SecondaryVolume = value; } } public bool SecondaryMuted { get { if (CurrentPrimary == 1) { return PlayerTwo.IsMuted; } else { return PlayerOne.IsMuted; } } set { if(CurrentPrimary == 1) { PlayerTwo.IsMuted = value; } else { PlayerOne.IsMuted = value; } } } public bool PrimaryMuted { get { if (CurrentPrimary == 1) { return PlayerOne.IsMuted; } else { return PlayerTwo.IsMuted; } } set { if (CurrentPrimary == 1) { PlayerOne.IsMuted = value; } else { PlayerTwo.IsMuted = value; } } } public void SwapPrimary() { if(CurrentPrimary == 1) { CurrentPrimary = 2; } else { CurrentPrimary = 1; } } public void StopPrimary() { if(CurrentPrimary == 1) { PlayerOne.Close(); } else { PlayerTwo.Close(); } } } }