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
}
}