This repo is archived. You can view files and clone it, but cannot push or open issues or pull requests.

380 lines
9.6 KiB
C#

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;
/// <summary>
/// Handlers for if the media either ends or completely stops playing.
/// Default interval is 5s between attempts to restart.
/// </summary>
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();
}
}
}
}