using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SuperSocket.SocketBase.Protocol
{
///
/// Basic request info parser, which parse request info by separating
///
public class BasicRequestInfoParser : IRequestInfoParser
{
private readonly string m_Spliter;
private readonly string[] m_ParameterSpliters;
private const string m_OneSpace = " ";
///
/// The default singlegton instance
///
public static readonly BasicRequestInfoParser DefaultInstance = new BasicRequestInfoParser();
///
/// Initializes a new instance of the class.
///
public BasicRequestInfoParser()
: this(m_OneSpace, m_OneSpace)
{
}
///
/// Initializes a new instance of the class.
///
/// The spliter between command name and command parameters.
/// The parameter spliter.
public BasicRequestInfoParser(string spliter, string parameterSpliter)
{
m_Spliter = spliter;
m_ParameterSpliters = new string[] { parameterSpliter };
}
#region IRequestInfoParser Members
///
/// Parses the request info.
///
/// The source.
///
public StringRequestInfo ParseRequestInfo(string source)
{
int pos = source.IndexOf(m_Spliter);
string name = string.Empty;
string param = string.Empty;
if (pos > 0)
{
name = source.Substring(0, pos);
param = source.Substring(pos + 1);
}
else
{
name = source;
}
return new StringRequestInfo(name, param,
param.Split(m_ParameterSpliters, StringSplitOptions.RemoveEmptyEntries));
}
#endregion
}
}