BasicRequestInfoParser.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace SuperSocket.SocketBase.Protocol
  6. {
  7. /// <summary>
  8. /// Basic request info parser, which parse request info by separating
  9. /// </summary>
  10. public class BasicRequestInfoParser : IRequestInfoParser<StringRequestInfo>
  11. {
  12. private readonly string m_Spliter;
  13. private readonly string[] m_ParameterSpliters;
  14. private const string m_OneSpace = " ";
  15. /// <summary>
  16. /// The default singlegton instance
  17. /// </summary>
  18. public static readonly BasicRequestInfoParser DefaultInstance = new BasicRequestInfoParser();
  19. /// <summary>
  20. /// Initializes a new instance of the <see cref="BasicRequestInfoParser"/> class.
  21. /// </summary>
  22. public BasicRequestInfoParser()
  23. : this(m_OneSpace, m_OneSpace)
  24. {
  25. }
  26. /// <summary>
  27. /// Initializes a new instance of the <see cref="BasicRequestInfoParser"/> class.
  28. /// </summary>
  29. /// <param name="spliter">The spliter between command name and command parameters.</param>
  30. /// <param name="parameterSpliter">The parameter spliter.</param>
  31. public BasicRequestInfoParser(string spliter, string parameterSpliter)
  32. {
  33. m_Spliter = spliter;
  34. m_ParameterSpliters = new string[] { parameterSpliter };
  35. }
  36. #region IRequestInfoParser<StringRequestInfo> Members
  37. /// <summary>
  38. /// Parses the request info.
  39. /// </summary>
  40. /// <param name="source">The source.</param>
  41. /// <returns></returns>
  42. public StringRequestInfo ParseRequestInfo(string source)
  43. {
  44. int pos = source.IndexOf(m_Spliter);
  45. string name = string.Empty;
  46. string param = string.Empty;
  47. if (pos > 0)
  48. {
  49. name = source.Substring(0, pos);
  50. param = source.Substring(pos + 1);
  51. }
  52. else
  53. {
  54. name = source;
  55. }
  56. return new StringRequestInfo(name, param,
  57. param.Split(m_ParameterSpliters, StringSplitOptions.RemoveEmptyEntries));
  58. }
  59. #endregion
  60. }
  61. }