Files
lserp_cs_6.0/插件库/Lskj.SocketService/AsyncSocketCore/IncomingDataParser.cs
T
cyf ab56a9bcf7 基线 SVN r240
SVN-Revision: r240
2025-02-06 06:46:06 +00:00

240 lines
9.0 KiB
C#

/******************************
* 说明:收到数据的解析器,用于解析返回的内容
* 创建人:龚宇超
* 创建日期:2018-01-23
* 修改人:
* 修改日期:
* 修改备注:
* 版本:1.0.0.0
******************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Lskj.SocketService
{
/// <summary>
/// 收到数据的解析器,用于解析返回的内容
/// </summary>
public class IncomingDataParser
{
private string _header;
private string _command;
private List<string> _names;
private List<string> _values;
/// <summary>
/// 解析头数据
/// </summary>
/// <value>The header.</value>
public string Header { get { return _header; } }
/// <summary>
/// 解析command数据
/// </summary>
/// <value>The command.</value>
public string Command { get { return _command; } }
public List<string> Names { get { return _names; } }
public List<string> Values { get { return _values; } }
public IncomingDataParser()
{
_names = new List<string>();
_values = new List<string>();
}
/// <summary>
/// <para>说明:解析协议文本</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-01-24 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="protocolText">The protocol text.</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
public bool DecodeProtocolText(string protocolText)
{
_header = "";
_names.Clear();
_values.Clear();
int speIndex = protocolText.IndexOf(ProtocolKey.ReturnWrap);
if (speIndex < 0)
{
return false;
}
else
{
string[] tmpNameValues = protocolText.Split(new string[] { ProtocolKey.ReturnWrap }, StringSplitOptions.RemoveEmptyEntries);
if (tmpNameValues.Length < 2) //每次命令至少包括两行
return false;
for (int i = 0; i < tmpNameValues.Length; i++)
{
string[] tmpStr = tmpNameValues[i].Split(new string[] { ProtocolKey.EqualSign }, StringSplitOptions.None);
if (tmpStr.Length > 1) //存在等号
{
if (tmpStr.Length > 2) //超过两个等号,返回失败
return false;
if (tmpStr[0].Equals(ProtocolKey.Command, StringComparison.CurrentCultureIgnoreCase))
{
_command = tmpStr[1];
}
else
{
_names.Add(tmpStr[0].ToLower());
_values.Add(tmpStr[1]);
}
}
}
return true;
}
}
/// <summary>
/// <para>说明:</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-01-24 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="protocolKey">The protocol key.</param>
/// <returns>List&lt;System.String&gt;.</returns>
public List<string> GetValue(string protocolKey)
{
List<string> result = new List<string>();
for (int i = 0; i < _names.Count; i++)
{
if (protocolKey.Equals(_names[i], StringComparison.CurrentCultureIgnoreCase))
result.Add(_values[i]);
}
return result;
}
/// <summary>
/// <para>说明:通过Key获取Value</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-01-24 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="protocolKey">The protocol key.</param>
/// <param name="value">The value.</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
public bool GetValue(string protocolKey, ref string value)
{
int index = _names.IndexOf(protocolKey.ToLower());
if (index > -1)
{
value = _values[index];
return true;
}
else
return false;
}
/// <summary>
/// <para>说明:通过Key获取Value</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-01-24 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="protocolKey">The protocol key.</param>
/// <param name="value">The value.</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
public bool GetValue(string protocolKey, ref short value)
{
int index = _names.IndexOf(protocolKey.ToLower());
if (index > -1)
{
return short.TryParse(_values[index], out value);
}
else
return false;
}
/// <summary>
/// <para>说明:通过Key获取Value</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-01-24 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="protocolKey">The protocol key.</param>
/// <param name="value">The value.</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
public bool GetValue(string protocolKey, ref int value)
{
int index = _names.IndexOf(protocolKey.ToLower());
if (index > -1)
return int.TryParse(_values[index], out value);
else
return false;
}
/// <summary>
/// <para>说明:通过Key获取Value</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-01-24 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="protocolKey">The protocol key.</param>
/// <param name="value">The value.</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
public bool GetValue(string protocolKey, ref long value)
{
int index = _names.IndexOf(protocolKey.ToLower());
if (index > -1)
return long.TryParse(_values[index], out value);
else
return false;
}
/// <summary>
/// <para>说明:通过Key获取Value</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-01-24 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="protocolKey">The protocol key.</param>
/// <param name="value">The value.</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
public bool GetValue(string protocolKey, ref Single value)
{
int index = _names.IndexOf(protocolKey.ToLower());
if (index > -1)
return Single.TryParse(_values[index], out value);
else
return false;
}
/// <summary>
/// <para>说明:通过Key获取Value</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-01-24 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="protocolKey">The protocol key.</param>
/// <param name="value">The value.</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
public bool GetValue(string protocolKey, ref Double value)
{
int index = _names.IndexOf(protocolKey.ToLower());
if (index > -1)
return Double.TryParse(_values[index], out value);
else
return false;
}
}
}