Skip to content

Commit 9fa33b8

Browse files
committed
replaced IStringPackageParser with IStringParser
1 parent a60517e commit 9fa33b8

10 files changed

+127
-114
lines changed

ProtoBase/BasicPackageInfoParser.cs

-73
This file was deleted.

ProtoBase/BasicStringParser.cs

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
6+
namespace SuperSocket.ProtoBase
7+
{
8+
/// <summary>
9+
/// the string parser who use SPACE to separate string into many parts
10+
/// </summary>
11+
public class BasicStringParser : IStringParser
12+
{
13+
private const string SPACE = " ";
14+
15+
private readonly string m_Spliter;
16+
private readonly string[] m_ParameterSpliters;
17+
18+
/// <summary>
19+
/// The default singlegton instance
20+
/// </summary>
21+
public static readonly BasicStringParser DefaultInstance = new BasicStringParser();
22+
23+
/// <summary>
24+
/// Initializes a new instance of the <see cref="BasicStringParser"/> class.
25+
/// </summary>
26+
public BasicStringParser()
27+
: this(SPACE, SPACE)
28+
{
29+
}
30+
31+
/// <summary>
32+
/// Initializes a new instance of the <see cref="BasicStringParser"/> class.
33+
/// </summary>
34+
/// <param name="spliter">The spliter between command name and command parameters.</param>
35+
/// <param name="parameterSpliter">The parameter spliter.</param>
36+
public BasicStringParser(string spliter, string parameterSpliter)
37+
{
38+
m_Spliter = spliter;
39+
m_ParameterSpliters = new string[] { parameterSpliter };
40+
}
41+
42+
/// <summary>
43+
/// parse the source string into key, body and parameters parts
44+
/// </summary>
45+
/// <param name="source">the source string</param>
46+
/// <param name="key">the parsed key</param>
47+
/// <param name="body">the parsed body</param>
48+
/// <param name="parameters">the parsed parameter</param>
49+
public void Parse(string source, out string key, out string body, out string[] parameters)
50+
{
51+
int pos = source.IndexOf(m_Spliter);
52+
53+
if (pos > 0)
54+
{
55+
key = source.Substring(0, pos);
56+
body = source.Substring(pos + 1);
57+
parameters = body.Split(m_ParameterSpliters, StringSplitOptions.RemoveEmptyEntries);
58+
}
59+
else
60+
{
61+
key = body = source;
62+
parameters = null;
63+
}
64+
}
65+
}
66+
}

ProtoBase/IStringPackageParser.cs

-21
This file was deleted.

ProtoBase/IStringParser.cs

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
6+
namespace SuperSocket.ProtoBase
7+
{
8+
/// <summary>
9+
/// the interface for the tools to parse string into key, body and parameters parts
10+
/// </summary>
11+
public interface IStringParser
12+
{
13+
/// <summary>
14+
/// parse the source string into key, body and parameters parts
15+
/// </summary>
16+
/// <param name="source">the source string</param>
17+
/// <param name="key">the parsed key</param>
18+
/// <param name="body">the parsed body</param>
19+
/// <param name="parameters">the parsed parameter</param>
20+
void Parse(string source, out string key, out string body, out string[] parameters);
21+
}
22+
}

ProtoBase/StringPackageInfo.cs

+18
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,24 @@ public StringPackageInfo(string key, string body, string[] parameters)
4747
Parameters = parameters;
4848
}
4949

50+
/// <summary>
51+
/// Initializes a new instance of the <see cref="StringPackageInfo"/> class.
52+
/// </summary>
53+
/// <param name="source">The source.</param>
54+
/// <param name="sourceParser">The source parser.</param>
55+
public StringPackageInfo(string source, IStringParser sourceParser)
56+
{
57+
string key;
58+
string body;
59+
string[] parameters;
60+
61+
sourceParser.Parse(source, out key, out body, out parameters);
62+
63+
Key = key;
64+
Body = body;
65+
Parameters = parameters;
66+
}
67+
5068
/// <summary>
5169
/// Gets the first param.
5270
/// </summary>

ProtoBase/SuperSocket.ProtoBase.Net40.csproj

+2-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
<Compile Include="..\Solution Items\GlobalAssemblyInfo.cs">
4949
<Link>GlobalAssemblyInfo.cs</Link>
5050
</Compile>
51-
<Compile Include="BasicPackageInfoParser.cs" />
51+
<Compile Include="BasicStringParser.cs" />
5252
<Compile Include="BeginEndMarkReceiveFilter.cs" />
5353
<Compile Include="BufferListReader.cs" />
5454
<Compile Include="BufferListStream.cs" />
@@ -68,6 +68,7 @@
6868
<Compile Include="IPackageResolver.cs" />
6969
<Compile Include="IPipelineProcessor.cs" />
7070
<Compile Include="IReceiveFilter.cs" />
71+
<Compile Include="IStringParser.cs" />
7172
<Compile Include="IStringPackageParser.cs" />
7273
<Compile Include="MimeHeaderHelper.cs" />
7374
<Compile Include="PackageInfo.cs" />

ProtoBase/SuperSocket.ProtoBase.Net45.csproj

+2-2
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
<Compile Include="..\Solution Items\GlobalAssemblyInfo.cs">
5252
<Link>GlobalAssemblyInfo.cs</Link>
5353
</Compile>
54-
<Compile Include="BasicPackageInfoParser.cs" />
54+
<Compile Include="BasicStringParser.cs" />
5555
<Compile Include="BeginEndMarkReceiveFilter.cs" />
5656
<Compile Include="BufferedPackageInfo.cs" />
5757
<Compile Include="BufferList.cs" />
@@ -73,7 +73,7 @@
7373
<Compile Include="IPackageResolver.cs" />
7474
<Compile Include="IPipelineProcessor.cs" />
7575
<Compile Include="IReceiveFilter.cs" />
76-
<Compile Include="IStringPackageParser.cs" />
76+
<Compile Include="IStringParser.cs" />
7777
<Compile Include="MimeHeaderHelper.cs" />
7878
<Compile Include="PackageInfo.cs" />
7979
<Compile Include="ProcessResult.cs" />

SocketBase/Protocol/CommandLineReceiveFilterFactory.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public CommandLineReceiveFilterFactory()
2525
/// </summary>
2626
/// <param name="encoding">The encoding.</param>
2727
public CommandLineReceiveFilterFactory(Encoding encoding)
28-
: this(encoding, new BasicPackageInfoParser())
28+
: this(encoding, new BasicStringParser())
2929
{
3030

3131
}
@@ -34,9 +34,9 @@ public CommandLineReceiveFilterFactory(Encoding encoding)
3434
/// Initializes a new instance of the <see cref="CommandLineReceiveFilterFactory"/> class.
3535
/// </summary>
3636
/// <param name="encoding">The encoding.</param>
37-
/// <param name="requestInfoParser">The request info parser.</param>
38-
public CommandLineReceiveFilterFactory(Encoding encoding, IStringPackageParser<StringPackageInfo> requestInfoParser)
39-
: base("\r\n", encoding, requestInfoParser)
37+
/// <param name="stringParser">The request info parser.</param>
38+
public CommandLineReceiveFilterFactory(Encoding encoding, IStringParser stringParser)
39+
: base("\r\n", encoding, stringParser)
4040
{
4141

4242
}

SocketBase/Protocol/TerminatorReceiveFilter.cs

+6-6
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,19 @@ namespace SuperSocket.SocketBase.Protocol
1212
public class TerminatorReceiveFilter : TerminatorReceiveFilter<StringPackageInfo>
1313
{
1414
private readonly Encoding m_Encoding;
15-
private readonly IStringPackageParser<StringPackageInfo> m_PackageParser;
15+
private readonly IStringParser m_StringParser;
1616

1717
/// <summary>
18-
/// Initializes a new instance of the <see cref="TerminatorReceiveFilter"/> class.
18+
/// Initializes a new instance of the <see cref="TerminatorReceiveFilter" /> class.
1919
/// </summary>
2020
/// <param name="terminator">The terminator.</param>
2121
/// <param name="encoding">The encoding.</param>
22-
/// <param name="packageParser">The package parser.</param>
23-
public TerminatorReceiveFilter(byte[] terminator, Encoding encoding, IStringPackageParser<StringPackageInfo> packageParser)
22+
/// <param name="stringParser">The string parser.</param>
23+
public TerminatorReceiveFilter(byte[] terminator, Encoding encoding, IStringParser stringParser)
2424
: base(terminator)
2525
{
2626
m_Encoding = encoding;
27-
m_PackageParser = packageParser;
27+
m_StringParser = stringParser;
2828
}
2929

3030
/// <summary>
@@ -57,7 +57,7 @@ public override StringPackageInfo ResolvePackage(IList<ArraySegment<byte>> packa
5757
totalBytesUsed += bytesUsed;
5858
}
5959

60-
return m_PackageParser.Parse(new string(charsBuffer, 0, outputOffset));
60+
return new StringPackageInfo(new string(charsBuffer, 0, outputOffset), m_StringParser);
6161
}
6262
}
6363
}

SocketBase/Protocol/TerminatorReceiveFilterFactory.cs

+7-7
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@ public class TerminatorReceiveFilterFactory : IReceiveFilterFactory<StringPackag
1414
{
1515
private readonly Encoding m_Encoding;
1616
private readonly byte[] m_Terminator;
17-
private readonly IStringPackageParser<StringPackageInfo> m_RequestInfoParser;
17+
private readonly IStringParser m_StringParser;
1818

1919
/// <summary>
2020
/// Initializes a new instance of the <see cref="TerminatorReceiveFilterFactory"/> class.
2121
/// </summary>
2222
/// <param name="terminator">The terminator.</param>
2323
public TerminatorReceiveFilterFactory(string terminator)
24-
: this(terminator, Encoding.ASCII, BasicPackageInfoParser.DefaultInstance)
24+
: this(terminator, Encoding.ASCII, BasicStringParser.DefaultInstance)
2525
{
2626

2727
}
@@ -32,7 +32,7 @@ public TerminatorReceiveFilterFactory(string terminator)
3232
/// <param name="terminator">The terminator.</param>
3333
/// <param name="encoding">The encoding.</param>
3434
public TerminatorReceiveFilterFactory(string terminator, Encoding encoding)
35-
: this(terminator, encoding, BasicPackageInfoParser.DefaultInstance)
35+
: this(terminator, encoding, BasicStringParser.DefaultInstance)
3636
{
3737

3838
}
@@ -42,12 +42,12 @@ public TerminatorReceiveFilterFactory(string terminator, Encoding encoding)
4242
/// </summary>
4343
/// <param name="terminator">The terminator.</param>
4444
/// <param name="encoding">The encoding.</param>
45-
/// <param name="requestInfoParser">The line parser.</param>
46-
public TerminatorReceiveFilterFactory(string terminator, Encoding encoding, IStringPackageParser<StringPackageInfo> requestInfoParser)
45+
/// <param name="stringParser">The line parser.</param>
46+
public TerminatorReceiveFilterFactory(string terminator, Encoding encoding, IStringParser stringParser)
4747
{
4848
m_Encoding = encoding;
4949
m_Terminator = encoding.GetBytes(terminator);
50-
m_RequestInfoParser = requestInfoParser;
50+
m_StringParser = stringParser;
5151
}
5252

5353
/// <summary>
@@ -61,7 +61,7 @@ public TerminatorReceiveFilterFactory(string terminator, Encoding encoding, IStr
6161
/// </returns>
6262
public virtual IReceiveFilter<StringPackageInfo> CreateFilter(IAppServer appServer, IAppSession appSession, IPEndPoint remoteEndPoint)
6363
{
64-
return new TerminatorReceiveFilter(m_Terminator, m_Encoding, m_RequestInfoParser);
64+
return new TerminatorReceiveFilter(m_Terminator, m_Encoding, m_StringParser);
6565
}
6666
}
6767
}

0 commit comments

Comments
 (0)