22using System . Collections . Generic ;
33using System . Linq ;
44using System . Text ;
5+ using Avalonia . Media ;
56
67namespace LLCOM . Models ;
78
89public class PacketData
910{
11+ public PacketData ( byte [ ] data , MessageWay way , string channel , string ? extra = null ,
12+ Encoding ? encoding = null , bool readable = true , string ? s = null , IBrush ? brush = null )
13+ {
14+ Data = data ;
15+ Way = way ;
16+ Channel = channel ;
17+ Extra = extra ?? Time . ToString ( "yyyy/MM/dd HH:mm:ss.fff" ) ;
18+ encoding ??= Encoding . UTF8 ;
19+ String = s ?? GenerateString ( Data , encoding , readable ) ;
20+ HexString = GenerateHexString ( Data ) ;
21+ }
22+
1023 /// <summary>
1124 /// 此包收到的时间
1225 /// </summary>
@@ -15,12 +28,14 @@ public class PacketData
1528 /// <summary>
1629 /// 包内的原始数据
1730 /// </summary>
18- public byte [ ] Data { get ; set ; } = [ ] ;
31+ public byte [ ] Data { get ; set ; }
32+
33+ public string HexString { get ; }
1934
2035 /// <summary>
21- /// 包的额外信息
36+ /// 包的额外信息,一般是日期时间的字符串展示
2237 /// </summary>
23- public string ? Extra { get ; set ; } = null ;
38+ public string Extra { get ; set ; }
2439
2540 /// <summary>
2641 /// 该包的字符串表示
@@ -36,19 +51,36 @@ public class PacketData
3651 /// 消息通道类型
3752 /// </summary>
3853 public string Channel { get ; set ; } = string . Empty ;
54+
55+ /// <summary>
56+ /// 表示该包的方向和通道的字符串
57+ /// </summary>
58+ public string TagString
59+ {
60+ get
61+ {
62+ return Way switch
63+ {
64+ MessageWay . Unknown => $ "{ Channel } ",
65+ MessageWay . Send => $ "本机 >> { Channel } ", //TODO 多语言支持
66+ MessageWay . Receive => $ "{ Channel } >> 本机", //TODO 多语言支持
67+ _ => throw new ArgumentOutOfRangeException ( )
68+ } ;
69+ }
70+ }
3971
4072 /// <summary>
4173 /// 根据Data生成一个十六进制字符串
4274 /// </summary>
43- public void GenerateHexString ( )
75+ public static string GenerateHexString ( byte [ ] data )
4476 {
4577 var sb = new StringBuilder ( ) ;
46- foreach ( var b in Data )
78+ foreach ( var b in data )
4779 {
4880 sb . Append ( b . ToString ( "X2" ) ) ;
4981 sb . Append ( " " ) ;
5082 }
51- String = sb . ToString ( ) ;
83+ return sb . ToString ( ) ;
5284 }
5385
5486 private static readonly byte [ ] BDel = "\u2421 "u8 . ToArray ( ) ;
@@ -74,26 +106,25 @@ public void GenerateHexString()
74106 /// </summary>
75107 /// <param name="encoding">指定的编码</param>
76108 /// <param name="readable">是否将不可见字符转义为可见字符</param>
77- /// <returns></returns>
78- public void GenerateString ( Encoding encoding , bool readable = true )
109+ /// <returns>转换后的字符串 </returns>
110+ public static string GenerateString ( byte [ ] data , Encoding encoding , bool readable = true )
79111 {
80112 //非utf8编码就不转义了
81113 if ( ! readable || encoding . CodePage != 65001 )
82114 {
83- String = Byte2String ( encoding , Data , true ) ;
84- return ;
115+ return Byte2String ( encoding , data , true ) ;
85116 }
86117 var temp = new List < byte > ( ) ;
87- for ( int i = 0 ; i < Data . Length ; i ++ )
118+ for ( int i = 0 ; i < data . Length ; i ++ )
88119 {
89- switch ( Data [ i ] )
120+ switch ( data [ i ] )
90121 {
91122 case 0x00 :
92123 temp . AddRange ( Symbols [ 0x00 ] ) ;
93124 break ;
94125 case 0x0d :
95126 //遇到成对出现
96- if ( i < Data . Length - 1 && Data [ i + 1 ] == 0x0a )
127+ if ( i < data . Length - 1 && data [ i + 1 ] == 0x0a )
97128 {
98129 temp . AddRange ( Symbols [ 0x0d ] ) ;
99130 temp . AddRange ( Symbols [ 0x0a ] ) ;
@@ -104,26 +135,26 @@ public void GenerateString(Encoding encoding, bool readable = true)
104135 else
105136 {
106137 temp . AddRange ( Symbols [ 0x0d ] ) ;
107- temp . Add ( Data [ i ] ) ;
138+ temp . Add ( data [ i ] ) ;
108139 }
109140 break ;
110141 case 0x0a :
111142 case 0x09 : //tab字符
112- temp . AddRange ( Symbols [ Data [ i ] ] ) ;
113- temp . Add ( Data [ i ] ) ;
143+ temp . AddRange ( Symbols [ data [ i ] ] ) ;
144+ temp . Add ( data [ i ] ) ;
114145 break ;
115146 default :
116147 //普通的字符
117- if ( Data [ i ] <= 0x1f )
118- temp . AddRange ( Symbols [ Data [ i ] ] ) ;
119- else if ( Data [ i ] == 0x7f ) //del
148+ if ( data [ i ] <= 0x1f )
149+ temp . AddRange ( Symbols [ data [ i ] ] ) ;
150+ else if ( data [ i ] == 0x7f ) //del
120151 temp . AddRange ( BDel ) ;
121152 else
122- temp . Add ( Data [ i ] ) ;
153+ temp . Add ( data [ i ] ) ;
123154 break ;
124155 }
125156 }
126- String = Byte2String ( encoding , temp . ToArray ( ) ) ;
157+ return Byte2String ( encoding , temp . ToArray ( ) ) ;
127158 }
128159
129160 /// <summary>
0 commit comments