using System; using System.Collections.Generic; using System.Linq; using System.Text; /************************************************************************************* * * 文件名:ClassNetHandle.cs * 功能: 网络通信头,标识消息的内容 * * 这个类公开在HslCommunication下面 * *************************************************************************************/ namespace HslCommunication { /// /// 用于网络传递的信息头,使用上等同于int /// [System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Explicit)] public struct NetHandle { #region Implicit Support /// /// 赋值操作,可以直接赋值int数据 /// /// int数值 public static implicit operator NetHandle(int value) { return new NetHandle(value); } /// /// 也可以赋值给int数据 /// /// netHandle对象 public static implicit operator int(NetHandle netHandle) { return netHandle.m_CodeValue; } #endregion #region Operator Support /// /// 判断是否相等 /// /// 第一个数 /// 第二个数 /// 等于返回True,否则False public static bool operator == (NetHandle netHandle1, NetHandle netHandle2) { return netHandle1.CodeValue == netHandle2.CodeValue; } /// /// 判断是否不相等 /// /// 第一个对象 /// 第二个对象 /// 等于返回False,否则True public static bool operator != (NetHandle netHandle1, NetHandle netHandle2) { return netHandle1.CodeValue != netHandle2.CodeValue; } /// /// 两个数值相加 /// /// 第一个对象 /// 第二个对象 /// 返回两个指令的和 public static NetHandle operator + (NetHandle netHandle1, NetHandle netHandle2) { return new NetHandle(netHandle1.CodeValue + netHandle2.CodeValue); } /// /// 两个数值相减 /// /// 第一个对象 /// 第二个对象 /// 返回两个指令的差 public static NetHandle operator - (NetHandle netHandle1, NetHandle netHandle2) { return new NetHandle(netHandle1.CodeValue - netHandle2.CodeValue); } /// /// 判断是否小于另一个数值 /// /// 第一个对象 /// 第二个对象 /// 小于则返回True,否则返回False public static bool operator < (NetHandle netHandle1, NetHandle netHandle2) { return netHandle1.CodeValue < netHandle2.CodeValue; } /// /// 判断是否大于另一个数值 /// /// 第一个对象 /// 第二个对象 /// 大于则返回True,否则返回False public static bool operator > (NetHandle netHandle1, NetHandle netHandle2) { return netHandle1.CodeValue > netHandle2.CodeValue; } #endregion #region Constructor /// /// 初始化一个暗号对象 /// /// 使用一个默认的数值进行初始化 public NetHandle(int value) { m_CodeMajor = 0; m_CodeMinor = 0; m_CodeIdentifier = 0; m_CodeValue = value; } /// /// 根据三个值来初始化暗号对象 /// /// 主暗号 /// 次暗号 /// 暗号编号 public NetHandle(byte major, byte minor, ushort identifier) { m_CodeValue = 0; m_CodeMajor = major; m_CodeMinor = minor; m_CodeIdentifier = identifier; } #endregion #region Private Members /// /// 完整的暗号值 /// [System.Runtime.InteropServices.FieldOffset(0)] private int m_CodeValue; /// /// 主暗号分类0-255 /// [System.Runtime.InteropServices.FieldOffset(3)] private byte m_CodeMajor; /// /// 次要的暗号分类0-255 /// [System.Runtime.InteropServices.FieldOffset(2)] private byte m_CodeMinor; /// /// 暗号的编号分类0-65535 /// [System.Runtime.InteropServices.FieldOffset(0)] private ushort m_CodeIdentifier; #endregion #region Public Members /// /// 完整的暗号值 /// public int CodeValue { get { return m_CodeValue; } set { m_CodeValue = value; } } /// /// 主暗号分类0-255 /// public byte CodeMajor { get { return m_CodeMajor; } private set { m_CodeMajor = value; } } /// /// 次要的暗号分类0-255 /// public byte CodeMinor { get { return m_CodeMinor; } private set { m_CodeMinor = value; } } /// /// 暗号的编号分类0-65535 /// public ushort CodeIdentifier { get { return m_CodeIdentifier; } private set { m_CodeIdentifier = value; } } #endregion #region Object Override /// /// 获取完整的暗号数据 /// /// 返回暗号的字符串表示形式 public override string ToString() { return m_CodeValue.ToString(); } /// /// 判断两个实例是否相同 /// /// /// 相同返回True,否则返回False public override bool Equals(object obj) { if (obj is NetHandle) { NetHandle headCode = (NetHandle)obj; return CodeValue.Equals(headCode.CodeValue); } else { return false; } } /// /// 获取哈希值 /// /// public override int GetHashCode() { return base.GetHashCode(); } #endregion } }