datapacket.cs
来自「zwave 无线通讯协议 PC controller 控制器源码」· CS 代码 · 共 200 行
CS
200 行
////////////////////////////////////////////////////////////////////////////////////////////////
//
// #######
// # ## #### ##### ##### ## ## #####
// ## ## ## ## ## ## ## ## ##
// ## # ###### ## ## #### ## ## ####
// ## ## ## ## ## ## ##### ##
// ####### #### ## ## ##### ## #####
// #####
// Z-Wave, the wireless language.
//
// Copyright Zensys A/S, 2005
//
// All Rights Reserved
//
// Description:
//
// Author: Morten Damsgaard, Linkage A/S
//
// Last Changed By: $Author: jrm $
// Revision: $Revision: 1.5 $
// Last Changed: $Date: 2006/07/24 09:14:16 $
//
//////////////////////////////////////////////////////////////////////////////////////////////
#region Using directives
using System;
using System.Text;
#endregion
namespace Zensys.ZWave.Communication
{
/// <summary>
/// DataPacket
/// </summary>
public class DataPacket
{
private const int BUFFER_SIZE = 100;
/// <summary>
/// DataPacket()
/// </summary>
public DataPacket()
{
this.idx = 0;
this.buffer = new byte[BUFFER_SIZE];
}
/// <summary>
/// DataPacket(byte[] payload)
/// </summary>
/// <param name="payload"></param>
public DataPacket(byte[] payload)
{
if (payload == null)
throw new ArgumentNullException("payload");
this.buffer = payload;
this.idx = payload.Length;
}
/// <summary>
/// AddPayload(byte data)
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public bool AddPayload(byte data)
{
if (idx > (buffer.Length-1)) return false;
buffer[idx++] = data;
return true;
}
/// <summary>
/// AddPayload(byte[] payload)
/// </summary>
/// <param name="payload"></param>
/// <returns></returns>
public bool AddPayload(byte[] payload)
{
if (payload == null)
{
throw new ArgumentNullException("payload");
}
if ((idx + payload.Length) > buffer.Length) return false;
payload.CopyTo(buffer, idx);
idx += (byte)payload.Length;
return true;
}
/// <summary>
/// byte[] GetPayload()
/// </summary>
/// <returns></returns>
public byte[] GetPayload()
{
byte[] payload = new byte[idx];
Array.Copy(buffer, 0, payload, 0, idx);
return payload;
}
/// <summary>
///
/// </summary>
public int Length
{
get { return idx; }
}
/// <summary>
///
/// </summary>
public byte SequenceNumber
{
get { return sequenceNumber; }
set { sequenceNumber = value; }
}
/// <summary>
///
/// </summary>
public DateTime Timestamp
{
get { return timestamp; }
set { timestamp = value; }
}
/// <summary>
/// String
/// </summary>
/// <returns></returns>
public override String ToString()
{
StringBuilder sb = new StringBuilder(100);
// Data payload...
for (int i = 0; i < idx; i++)
{
sb.Append(buffer[i]);
sb.Append(' ');
}
return sb.ToString();
}
/// <summary>
///
/// </summary>
/// <param name="dp1"></param>
/// <param name="dp2"></param>
/// <returns></returns>
public static bool operator ==(DataPacket dp1, DataPacket dp2)
{
if (!(dp1 is DataPacket) || !(dp2 is DataPacket)) return false;
if (dp1.Length != dp2.Length) return false;
for (int i = 0; i < dp1.Length; i++)
if (dp1.buffer[i] != dp2.buffer[i]) return false;
return true;
}
/// <summary>
///
/// </summary>
/// <param name="dp1"></param>
/// <param name="dp2"></param>
/// <returns></returns>
public static bool operator !=(DataPacket dp1, DataPacket dp2)
{
return !(dp1 == dp2);
}
/// <summary>
///
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public override bool Equals(object obj)
{
if (!(obj is DataPacket)) return false;
return (this == (DataPacket)obj);
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public override int GetHashCode()
{
return base.GetHashCode();
}
private DateTime timestamp;
private byte[] buffer;
private int idx;
private byte sequenceNumber;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?