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 + -
显示快捷键?