public byte[] Build(IRequest request) { var requestType = request.GetType(); var requestTypeAttribute = (RequestTypeAttribute)requestType.GetCustomAttribute(typeof(RequestTypeAttribute)); var requestBytes = new List <byte>(); const byte protocolVersion = 0x00; requestBytes.Add(protocolVersion); requestBytes.Add(requestTypeAttribute.RequestType0); requestBytes.Add(requestTypeAttribute.RequestType1); requestBytes.Add(requestTypeAttribute.RequestType2); requestBytes.Add(requestTypeAttribute.RequestType3); var dataBytes = new List <byte>(); foreach (var propertyInfo in requestType.GetAllProperties()) { var value = propertyInfo.GetValue(request); dataBytes.AddRange(_dataConverterDispatcher.Convert(value)); } requestBytes.AddRange(BitConverter.GetBytes((ushort)dataBytes.Count)); requestBytes.AddRange(dataBytes); var checksum = Crc16.ComputeChecksum(requestBytes); requestBytes.Add(checksum[0]); requestBytes.Add(checksum[1]); return(requestBytes.ToArray()); }
public byte[] Build(IResponse response) { var responseType = response.GetType(); var responseBytes = new List <byte>(); const byte protocolVersion = 0x00; responseBytes.Add(protocolVersion); responseBytes.AddRange(GetResponseTypeBytes(responseType, response)); var dataBytes = new List <byte>(); foreach (var propertyInfo in responseType.GetAllProperties()) { var value = propertyInfo.GetValue(response); dataBytes.AddRange(_dataConverterDispatcher.Convert(value)); } responseBytes.AddRange(BitConverter.GetBytes((ushort)dataBytes.Count)); responseBytes.AddRange(dataBytes); var checksum = Crc16.ComputeChecksum(responseBytes); responseBytes.Add(checksum[0]); responseBytes.Add(checksum[1]); return(responseBytes.ToArray()); }