asternet/Asterisk.2013/Asterisk.NET/FastAGI/Command/RecordFileCommand.cs

143 lines
5.1 KiB
C#

using System;
namespace AsterNET.FastAGI.Command
{
/// <summary>
/// Record to a file until a given dtmf digit in the sequence is received.<br/>
/// Returns -1 on hangup or error.<br/>
/// The format will specify what kind of file will be recorded. The timeout is
/// the maximum record time in milliseconds, or -1 for no timeout. Offset samples
/// is optional, and if provided will seek to the offset without exceeding the
/// end of the file. "maxSilence" is the number of seconds of maxSilence allowed
/// before the function returns despite the lack of dtmf digits or reaching
/// timeout.
/// </summary>
public class RecordFileCommand : AGICommand
{
#region Variables
/// <summary> The name of the file to record.</summary>
private string file;
/// <summary> The format of the file to be recorded, for example "wav".</summary>
private string format;
/// <summary> The these digits a user can press to end the recording.</summary>
private string escapeDigits;
/// <summary> The maximum record time in milliseconds, or -1 for no timeout.</summary>
private int timeout;
/// <summary> The offset samples to skip.</summary>
private int offset;
/// <summary> Wheather a beep should be played before recording.</summary>
private bool beep;
/// <summary> The amount of silence (in seconds) to allow before returning despite the lack of dtmf digits or reaching timeout.</summary>
private int maxSilence;
#endregion
#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 Format
/// <summary>
/// Get/Set the format of the file to be recorded, for example "wav".
/// </summary>
public string Format
{
get { return format; }
set { this.format = value; }
}
#endregion
#region EscapeDigits
/// <summary>
/// Get/Set the digits that allow the user to end recording.
/// </summary>
public string EscapeDigits
{
get { return escapeDigits; }
set { this.escapeDigits = value; }
}
#endregion
#region Timeout
/// <summary>
/// Get/Set the maximum record time in milliseconds, or -1 for no timeout.
/// </summary>
public int Timeout
{
get { return timeout; }
set { this.timeout = value; }
}
#endregion
#region Offset
/// <summary>
/// Get/Set the offset samples to skip.
/// </summary>
public int Offset
{
get { return offset; }
set { this.offset = value; }
}
#endregion
#region Beep
/// <summary>
/// Get/Set true if a beep should be played before recording. false if not.
/// </summary>
public bool Beep
{
get { return beep; }
set { this.beep = value; }
}
#endregion
#region Constructor - RecordFileCommand(string file, string format, string escapeDigits, int timeout)
/// <summary>
/// Creates a new RecordFileCommand.
/// </summary>
/// <param name="file">the name of the file to stream, must not include extension.</param>
/// <param name="format">the format of the file to be recorded, for example "wav".</param>
/// <param name="escapeDigits">contains the digits that allow the user to end recording.</param>
/// <param name="timeout">the maximum record time in milliseconds, or -1 for no timeout.</param>
public RecordFileCommand(string file, string format, string escapeDigits, int timeout)
{
this.file = file;
this.format = format;
this.escapeDigits = escapeDigits;
this.timeout = timeout;
this.offset = 0;
this.beep = false;
this.maxSilence = 0;
}
#endregion
#region Constructor - RecordFileCommand(string file, string format, string escapeDigits, int timeout)
/// <summary>
/// Creates a new RecordFileCommand.
/// </summary>
/// <param name="file">the name of the file to stream, must not include extension.</param>
/// <param name="format">the format of the file to be recorded, for example "wav".</param>
/// <param name="escapeDigits">contains the digits that allow the user to end recording.</param>
/// <param name="timeout">the maximum record time in milliseconds, or -1 for no timeout.</param>
/// <param name="offset">the offset samples to skip.</param>
/// <param name="beep">true if a beep should be played before recording.</param>
/// <param name="maxSilence">The amount of silence (in seconds) to allow before returning despite the lack of dtmf digits or reaching timeout.</param>
public RecordFileCommand(string file, string format, string escapeDigits, int timeout, int offset, bool beep, int maxSilence)
{
this.file = file;
this.format = format;
this.escapeDigits = escapeDigits;
this.timeout = timeout;
this.offset = offset;
this.beep = beep;
this.maxSilence = maxSilence;
}
#endregion
#region BuildCommand()
public override string BuildCommand()
{
return "RECORD FILE " + EscapeAndQuote(file) + " " + EscapeAndQuote(format) + " " + EscapeAndQuote(escapeDigits) + " " + timeout + " " + offset + (beep == true?" BEEP":"") + " s=" + maxSilence;
}
#endregion
}
}