internal void Write(IROCMessage message) { var frameBytes = BuildMessageFrame(message); var frameLength = frameBytes.Length; var bufferedBytes = new byte[frameLength]; Buffer.BlockCopy(frameBytes, 0, bufferedBytes, 0, frameLength); Channel.Write(ref bufferedBytes, 0, frameLength); }
internal bool ChecksumsMatch(IROCMessage message, byte[] messageFrame) { if (messageFrame.Length < message.MessageFrame.Length) { return(false); } // Compute the hash using (CRC16 Hash = new CRC16()) { var crc = BitConverter.ToUInt16(Hash.ComputeHash(message.MessageFrame, 0, (messageFrame.Length - CRC_LENGTH)), 0); return(BitConverter.ToUInt16(messageFrame, messageFrame.Length - CRC_LENGTH) == crc); } }
internal byte[] BuildMessageFrame(IROCMessage message) { var messageBody = new List <byte>(); messageBody.AddRange(message.MessageFrame); using (CRC16 Hash = new CRC16()) { messageBody.AddRange(Hash.ComputeHash(message.MessageFrame, 0, messageBody.Count)); } return(messageBody.ToArray()); }