ab56a9bcf7
SVN-Revision: r240
240 lines
9.0 KiB
C#
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<System.String>.</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;
|
|
}
|
|
}
|
|
} |