/// <summary> /// Initializes a new instance of the <see cref="GAF.Net.PacketHeader"/> class. /// </summary> /// <param name="headerBytes">Header bytes.</param> public PacketHeader(byte[] headerBytes) { _headerBytes = headerBytes; if (_headerBytes.Length != HeaderLength) { throw new ArgumentOutOfRangeException("headerBytes", string.Format("The header must be a byte array of length {0}", HeaderLength)); } // header consists of //soh (Guid) 16 bytes //length (int) 4 bytes //pid (byte) 1 byte //oid (Guid) 16 bytes var headerSoh = new byte[16]; //guid var headerOid = new byte[16]; //guid //get the header elements Array.Copy(headerBytes, _indexOfSoh, headerSoh, 0, headerSoh.Length); if (new Guid(headerSoh).ToString() != SOH.ToString()) { throw new ArgumentException("SOH is invalid.", "headerBytes"); } // pid PacketId = (PacketId)headerBytes [_indexOfPid]; // objectId set by consumer Array.Copy(headerBytes, _indexOfOid, headerOid, 0, headerOid.Length); ObjectId = new Guid(headerOid); DataLength = BitConverter.ToInt32(headerBytes, _indexofDataLengthElement); }
/// <summary> /// Returns the Packet as a byte array. /// </summary> /// <returns>A byte array.</returns> public byte[] ToByteArray() { var headerBytes = new byte[HeaderLength]; var soh = SOH.ToByteArray(); var pid = new byte[1] { (byte)PacketId }; var headerObjectId = ObjectId.ToByteArray(); var headerDataLength = BitConverter.GetBytes(DataLength); //copy the header elements to the header property Array.Copy(soh, 0, headerBytes, _indexOfSoh, soh.Length); // SOH Array.Copy(headerDataLength, 0, headerBytes, _indexofDataLengthElement, headerDataLength.Length); //Data Length Array.Copy(pid, 0, headerBytes, _indexOfPid, pid.Length); Array.Copy(headerObjectId, 0, headerBytes, _indexOfOid, headerObjectId.Length); // Object Id return(headerBytes); }