using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace XMPPMsg.Models
{
/// <summary>
/// 通信包基类
/// </summary>
public class MessagePacketBase
{
//private StringBuilder _Body = new StringBuilder();
public MessagePacketBase()
{
Peek = 0;
}
public MessagePacketBase(string MsgPacket):this()
{
Regex regex = new Regex("(?<!\\\\),");
MatchCollection mc = regex.Matches(MsgPacket);
//mc[0].
string[] _2=regex.Split(MsgPacket);
foreach (string s in _2)
{
if (!string.IsNullOrEmpty(s))
{
_Nodes.Add(MessageDecode(s));
}
}
}
#region //property
/// <summary>
/// 指针:下一个位置
/// </summary>
public int Peek { get; set; }
/// <summary>
/// 信息节集合
/// </summary>
List<string> _Nodes = new List<string>();
/// <summary>
/// 信息节列表
/// </summary>
public List<string> Nodes
{
get
{
return _Nodes;
}
}
#endregion
#region//global function
public void Add(string _MessageNode)
{
_Nodes.Add(_MessageNode);
}
public void Insert(int _index,string _MessageNode)
{
_Nodes.Insert(_index, _MessageNode);
}
/// <summary>
/// 读取下一段内容
/// 如果已经到最后,返回空字符串
/// </summary>
/// <returns></returns>
public string Read()
{
if (Peek < _Nodes.Count && Peek > -1)
{
Peek++;
return _Nodes[Peek-1];
}
return "";
}
/// <summary>
/// 读取指定段内容
/// 如果位置超出上、下限,返回空字符串
/// </summary>
/// <param name="_pos">位置</param>
/// <returns></returns>
public string Read(int _pos)
{
if (_pos < _Nodes.Count && _pos>-1)
{
return _Nodes[_pos];
}
return "";
}
public override string ToString()
{
StringBuilder _Body = new StringBuilder();
bool isfirst = true;
foreach (string s in _Nodes)
{
if (isfirst)
{
isfirst = false;
_Body.AppendFormat("{0}", MessageEncode(s));
}
else
{
_Body.AppendFormat(",{0}", MessageEncode(s));
}
}
return _Body.ToString();
}
#endregion
#region //private
/// <summary>
/// 编译
/// </summary>
/// <param name="_s"></param>
/// <returns></returns>
string MessageEncode(string _s)
{
return _s.Replace(",", "\\,");
}
/// <summary>
/// 反译
/// </summary>
/// <param name="_s"></param>
/// <returns></returns>
string MessageDecode(string _s)
{
return _s.Replace("\\,", ",");
}
#endregion
}
}
c#字符串包,支持打包、打包,依次取段内容、定位取段内容
最新推荐文章于 2023-03-26 18:19:35 发布