204 lines
7.3 KiB
C#
204 lines
7.3 KiB
C#
using System;
|
|
using System.Text;
|
|
|
|
namespace AsterNET.FastAGI.Command
|
|
{
|
|
/// <summary>
|
|
/// Plays the given file, allowing playback to be interrupted by the given
|
|
/// digits, if any, and allows the listner to control the stream.<br/>
|
|
/// If offset is provided then the audio will seek to sample offset before play
|
|
/// starts.<br/>
|
|
/// Returns 0 if playback completes without a digit being pressed, or the ASCII
|
|
/// numerical value of the digit if one was pressed, or -1 on error or if the
|
|
/// channel was disconnected. <br/>
|
|
/// Remember, the file extension must not be included in the filename.<br/>
|
|
/// Available since Asterisk 1.2
|
|
/// </summary>
|
|
public class ControlStreamFileCommand : AGICommand
|
|
{
|
|
/// <summary> The name of the file to stream.</summary>
|
|
private string file;
|
|
/// <summary> When one of these digits is pressed while streaming the command returns.</summary>
|
|
private string escapeDigits;
|
|
/// <summary> The offset samples to skip before streaming.</summary>
|
|
private int offset;
|
|
private string forwardDigit;
|
|
private string rewindDigit;
|
|
private string pauseDigit;
|
|
|
|
#region File
|
|
/// <summary>
|
|
/// Get/Set the name of the file to stream.
|
|
/// </summary>
|
|
public string File
|
|
{
|
|
get { return file; }
|
|
set { this.file = value; }
|
|
}
|
|
#endregion
|
|
#region EscapeDigits
|
|
/// <summary>
|
|
/// Get/Set the digits that allow the user to interrupt this command or null for none.
|
|
/// </summary>
|
|
public string EscapeDigits
|
|
{
|
|
get { return escapeDigits; }
|
|
set { this.escapeDigits = value; }
|
|
}
|
|
#endregion
|
|
#region Offset
|
|
/// <summary>
|
|
/// Get/Set the offset samples to skip before streaming.
|
|
/// </summary>
|
|
public int Offset
|
|
{
|
|
get { return offset; }
|
|
set { this.offset = value; }
|
|
}
|
|
#endregion
|
|
#region ForwardDigit
|
|
/// <summary>
|
|
/// Get the digit for fast forward.
|
|
/// </summary>
|
|
public string ForwardDigit
|
|
{
|
|
get { return forwardDigit; }
|
|
}
|
|
#endregion
|
|
#region RewindDigit
|
|
/// <summary>
|
|
/// Get the digit for rewind.
|
|
/// </summary>
|
|
public string RewindDigit
|
|
{
|
|
get { return rewindDigit; }
|
|
}
|
|
#endregion
|
|
#region PauseDigit
|
|
/// <summary>
|
|
/// Get the digit for pause and unpause.
|
|
/// </summary>
|
|
public string PauseDigit
|
|
{
|
|
get { return pauseDigit; }
|
|
}
|
|
#endregion
|
|
|
|
#region ControlStreamFileCommand(string file)
|
|
/// <summary>
|
|
/// Creates a new ControlStreamFileCommand, streaming from the beginning. It
|
|
/// uses the default digit "#" for forward and "*" for rewind and does not
|
|
/// support pausing.
|
|
/// </summary>
|
|
/// <param name="file">the name of the file to stream, must not include extension.</param>
|
|
public ControlStreamFileCommand(string file)
|
|
{
|
|
this.file = file;
|
|
this.escapeDigits = null;
|
|
this.offset = - 1;
|
|
}
|
|
#endregion
|
|
#region ControlStreamFileCommand(string file, string escapeDigits)
|
|
/// <summary>
|
|
/// Creates a new ControlStreamFileCommand, streaming from the beginning. It
|
|
/// uses the default digit "#" for forward and "*" for rewind and does not
|
|
/// support pausing.
|
|
/// </summary>
|
|
/// <param name="file">the name of the file to stream, must not include extension.</param>
|
|
/// <param name="escapeDigits">contains the digits that allow the user to interrupt this command.</param>
|
|
public ControlStreamFileCommand(string file, string escapeDigits)
|
|
{
|
|
this.file = file;
|
|
this.escapeDigits = escapeDigits;
|
|
this.offset = - 1;
|
|
}
|
|
#endregion
|
|
#region ControlStreamFileCommand(string file, string escapeDigits, int offset)
|
|
/// <summary>
|
|
/// Creates a new ControlStreamFileCommand, streaming from the given offset.
|
|
/// It uses the default digit "#" for forward and "*" for rewind and does not
|
|
/// support pausing.
|
|
/// </summary>
|
|
/// <param name="file">the name of the file to stream, must not include extension.</param>
|
|
/// <param name="escapeDigits">
|
|
/// contains the digits that allow the user to interrupt this command.
|
|
/// Maybe null if you don't want the user to interrupt.
|
|
/// </param>
|
|
/// <param name="offset">the offset samples to skip before streaming.</param>
|
|
public ControlStreamFileCommand(string file, string escapeDigits, int offset)
|
|
{
|
|
this.file = file;
|
|
this.escapeDigits = escapeDigits;
|
|
this.offset = offset;
|
|
}
|
|
#endregion
|
|
#region ControlStreamFileCommand(string file, string escapeDigits, int offset, string forwardDigit, string rewindDigit, string pauseDigit)
|
|
/// <summary>
|
|
/// Creates a new ControlStreamFileCommand, streaming from the given offset.
|
|
/// It uses the default digit "#" for forward and "*" for rewind and does not
|
|
/// support pausing.
|
|
/// </summary>
|
|
/// <param name="file">the name of the file to stream, must not include extension.</param>
|
|
/// <param name="escapeDigits">contains the digits that allow the user to interrupt this command. Maybe null if you don't want the user to interrupt.</param>
|
|
/// <param name="offset">the offset samples to skip before streaming.</param>
|
|
/// <param name="forwardDigit">the digit for fast forward.</param>
|
|
/// <param name="rewindDigit">the digit for rewind.</param>
|
|
/// <param name="pauseDigit">the digit for pause and unpause.</param>
|
|
public ControlStreamFileCommand(string file, string escapeDigits, int offset, string forwardDigit, string rewindDigit, string pauseDigit)
|
|
{
|
|
this.file = file;
|
|
this.escapeDigits = escapeDigits;
|
|
this.offset = offset;
|
|
this.forwardDigit = forwardDigit;
|
|
this.rewindDigit = rewindDigit;
|
|
this.pauseDigit = pauseDigit;
|
|
}
|
|
#endregion
|
|
|
|
#region ControlDigits(string forwardDigit, string rewindDigit)
|
|
/// <summary>
|
|
/// Sets the control digits for fast forward and rewind.
|
|
/// </summary>
|
|
/// <param name="forwardDigit">the digit for fast forward.</param>
|
|
/// <param name="rewindDigit">the digit for rewind.</param>
|
|
public void ControlDigits(string forwardDigit, string rewindDigit)
|
|
{
|
|
this.forwardDigit = forwardDigit;
|
|
this.rewindDigit = rewindDigit;
|
|
}
|
|
#endregion
|
|
#region ControlDigits(string forwardDigit, string rewindDigit, string pauseDigit)
|
|
/// <summary>
|
|
/// Sets the control digits for fast forward, rewind and pause.
|
|
/// </summary>
|
|
/// <param name="forwardDigit">the digit for fast forward.</param>
|
|
/// <param name="rewindDigit">the digit for rewind.</param>
|
|
/// <param name="pauseDigit">the digit for pause and unpause.</param>
|
|
public void ControlDigits(string forwardDigit, string rewindDigit, string pauseDigit)
|
|
{
|
|
this.forwardDigit = forwardDigit;
|
|
this.rewindDigit = rewindDigit;
|
|
this.pauseDigit = pauseDigit;
|
|
}
|
|
#endregion
|
|
|
|
#region BuildCommand()
|
|
public override string BuildCommand()
|
|
{
|
|
StringBuilder sb = new StringBuilder("CONTROL STREAM FILE ");
|
|
sb.Append(EscapeAndQuote(file) + " " + EscapeAndQuote(escapeDigits));
|
|
if (offset >= 0)
|
|
sb.Append(" " + offset.ToString());
|
|
else if (forwardDigit != null || rewindDigit != null || pauseDigit != null)
|
|
sb.Append(" 0");
|
|
if (forwardDigit != null || rewindDigit != null || pauseDigit != null)
|
|
sb.Append(" " + forwardDigit);
|
|
if (rewindDigit != null || pauseDigit != null)
|
|
sb.Append(" " + rewindDigit);
|
|
if (pauseDigit != null)
|
|
sb.Append(" " + pauseDigit);
|
|
return sb.ToString();
|
|
}
|
|
#endregion
|
|
}
|
|
} |