ClassNetHandle.cs 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. /*************************************************************************************
  6. *
  7. * 文件名:ClassNetHandle.cs
  8. * 功能: 网络通信头,标识消息的内容
  9. *
  10. * 这个类公开在HslCommunication下面
  11. *
  12. *************************************************************************************/
  13. namespace HslCommunication
  14. {
  15. /// <summary>
  16. /// 用于网络传递的信息头,使用上等同于int
  17. /// </summary>
  18. [System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Explicit)]
  19. public struct NetHandle
  20. {
  21. #region Implicit Support
  22. /// <summary>
  23. /// 赋值操作,可以直接赋值int数据
  24. /// </summary>
  25. /// <param name="value">int数值</param>
  26. public static implicit operator NetHandle(int value)
  27. {
  28. return new NetHandle(value);
  29. }
  30. /// <summary>
  31. /// 也可以赋值给int数据
  32. /// </summary>
  33. /// <param name="netHandle">netHandle对象</param>
  34. public static implicit operator int(NetHandle netHandle)
  35. {
  36. return netHandle.m_CodeValue;
  37. }
  38. #endregion
  39. #region Operator Support
  40. /// <summary>
  41. /// 判断是否相等
  42. /// </summary>
  43. /// <param name="netHandle1">第一个数</param>
  44. /// <param name="netHandle2">第二个数</param>
  45. /// <returns>等于返回<c>True</c>,否则<c>False</c></returns>
  46. public static bool operator == (NetHandle netHandle1, NetHandle netHandle2)
  47. {
  48. return netHandle1.CodeValue == netHandle2.CodeValue;
  49. }
  50. /// <summary>
  51. /// 判断是否不相等
  52. /// </summary>
  53. /// <param name="netHandle1">第一个对象</param>
  54. /// <param name="netHandle2">第二个对象</param>
  55. /// <returns>等于返回<c>False</c>,否则<c>True</c></returns>
  56. public static bool operator != (NetHandle netHandle1, NetHandle netHandle2)
  57. {
  58. return netHandle1.CodeValue != netHandle2.CodeValue;
  59. }
  60. /// <summary>
  61. /// 两个数值相加
  62. /// </summary>
  63. /// <param name="netHandle1">第一个对象</param>
  64. /// <param name="netHandle2">第二个对象</param>
  65. /// <returns>返回两个指令的和</returns>
  66. public static NetHandle operator + (NetHandle netHandle1, NetHandle netHandle2)
  67. {
  68. return new NetHandle(netHandle1.CodeValue + netHandle2.CodeValue);
  69. }
  70. /// <summary>
  71. /// 两个数值相减
  72. /// </summary>
  73. /// <param name="netHandle1">第一个对象</param>
  74. /// <param name="netHandle2">第二个对象</param>
  75. /// <returns>返回两个指令的差</returns>
  76. public static NetHandle operator - (NetHandle netHandle1, NetHandle netHandle2)
  77. {
  78. return new NetHandle(netHandle1.CodeValue - netHandle2.CodeValue);
  79. }
  80. /// <summary>
  81. /// 判断是否小于另一个数值
  82. /// </summary>
  83. /// <param name="netHandle1">第一个对象</param>
  84. /// <param name="netHandle2">第二个对象</param>
  85. /// <returns>小于则返回<c>True</c>,否则返回<c>False</c></returns>
  86. public static bool operator < (NetHandle netHandle1, NetHandle netHandle2)
  87. {
  88. return netHandle1.CodeValue < netHandle2.CodeValue;
  89. }
  90. /// <summary>
  91. /// 判断是否大于另一个数值
  92. /// </summary>
  93. /// <param name="netHandle1">第一个对象</param>
  94. /// <param name="netHandle2">第二个对象</param>
  95. /// <returns>大于则返回<c>True</c>,否则返回<c>False</c></returns>
  96. public static bool operator > (NetHandle netHandle1, NetHandle netHandle2)
  97. {
  98. return netHandle1.CodeValue > netHandle2.CodeValue;
  99. }
  100. #endregion
  101. #region Constructor
  102. /// <summary>
  103. /// 初始化一个暗号对象
  104. /// </summary>
  105. /// <param name="value">使用一个默认的数值进行初始化</param>
  106. public NetHandle(int value)
  107. {
  108. m_CodeMajor = 0;
  109. m_CodeMinor = 0;
  110. m_CodeIdentifier = 0;
  111. m_CodeValue = value;
  112. }
  113. /// <summary>
  114. /// 根据三个值来初始化暗号对象
  115. /// </summary>
  116. /// <param name="major">主暗号</param>
  117. /// <param name="minor">次暗号</param>
  118. /// <param name="identifier">暗号编号</param>
  119. public NetHandle(byte major, byte minor, ushort identifier)
  120. {
  121. m_CodeValue = 0;
  122. m_CodeMajor = major;
  123. m_CodeMinor = minor;
  124. m_CodeIdentifier = identifier;
  125. }
  126. #endregion
  127. #region Private Members
  128. /// <summary>
  129. /// 完整的暗号值
  130. /// </summary>
  131. [System.Runtime.InteropServices.FieldOffset(0)]
  132. private int m_CodeValue;
  133. /// <summary>
  134. /// 主暗号分类0-255
  135. /// </summary>
  136. [System.Runtime.InteropServices.FieldOffset(3)]
  137. private byte m_CodeMajor;
  138. /// <summary>
  139. /// 次要的暗号分类0-255
  140. /// </summary>
  141. [System.Runtime.InteropServices.FieldOffset(2)]
  142. private byte m_CodeMinor;
  143. /// <summary>
  144. /// 暗号的编号分类0-65535
  145. /// </summary>
  146. [System.Runtime.InteropServices.FieldOffset(0)]
  147. private ushort m_CodeIdentifier;
  148. #endregion
  149. #region Public Members
  150. /// <summary>
  151. /// 完整的暗号值
  152. /// </summary>
  153. public int CodeValue
  154. {
  155. get
  156. {
  157. return m_CodeValue;
  158. }
  159. set
  160. {
  161. m_CodeValue = value;
  162. }
  163. }
  164. /// <summary>
  165. /// 主暗号分类0-255
  166. /// </summary>
  167. public byte CodeMajor
  168. {
  169. get
  170. {
  171. return m_CodeMajor;
  172. }
  173. private set
  174. {
  175. m_CodeMajor = value;
  176. }
  177. }
  178. /// <summary>
  179. /// 次要的暗号分类0-255
  180. /// </summary>
  181. public byte CodeMinor {
  182. get
  183. {
  184. return m_CodeMinor;
  185. } private set { m_CodeMinor = value; } }
  186. /// <summary>
  187. /// 暗号的编号分类0-65535
  188. /// </summary>
  189. public ushort CodeIdentifier {
  190. get
  191. {
  192. return m_CodeIdentifier;
  193. } private set { m_CodeIdentifier = value; } }
  194. #endregion
  195. #region Object Override
  196. /// <summary>
  197. /// 获取完整的暗号数据
  198. /// </summary>
  199. /// <returns>返回暗号的字符串表示形式</returns>
  200. public override string ToString()
  201. {
  202. return m_CodeValue.ToString();
  203. }
  204. /// <summary>
  205. /// 判断两个实例是否相同
  206. /// </summary>
  207. /// <param name="obj"></param>
  208. /// <returns>相同返回<c>True</c>,否则返回<c>False</c></returns>
  209. public override bool Equals(object obj)
  210. {
  211. if (obj is NetHandle)
  212. {
  213. NetHandle headCode = (NetHandle)obj;
  214. return CodeValue.Equals(headCode.CodeValue);
  215. }
  216. else
  217. {
  218. return false;
  219. }
  220. }
  221. /// <summary>
  222. /// 获取哈希值
  223. /// </summary>
  224. /// <returns></returns>
  225. public override int GetHashCode()
  226. {
  227. return base.GetHashCode();
  228. }
  229. #endregion
  230. }
  231. }