示例#1
0
        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());
        }