示例#1
0
        public static TrainDataEntity GetDataModelFromInputString(string snNumber, string inputStr, out ushort serverComputedCrc)
        {
            inputStr = inputStr.StringCuttedBy("%");

            var paramPositions =
                Array.ConvertAll(ConfigurationManager.AppSettings["parameterPositions"].Split(','), int.Parse);

            var dataModel = new TrainDataEntity();

            // retrieve date, because it's in integer
            dataModel.MeasurementDateTime = GetDateTime(inputStr.Substring(paramPositions[4] * 2, 12));
            var byteArray = inputStr.SplitInParts(2).Select(s => byte.Parse(s, NumberStyles.HexNumber)).ToArray();

            var index = 1;

            dataModel.PackageNumber      = ushort.Parse(snNumber);
            dataModel.SystemSerialNumber = BitConverter.ToUInt16(byteArray, paramPositions[index++]);
            dataModel.ProviderName       = Encoding.Default.GetString(byteArray.SubArray(paramPositions[index++], 15)).StringCuttedBy("\0");
            dataModel.IsSystemWorking    = BitConverter.ToBoolean(byteArray, paramPositions[index++]);

            // skipping date
            index += 6;

            dataModel.EnvironmentTemperature   = BitConverter.ToSingle(byteArray, paramPositions[index++]);
            dataModel.Radiator1Temperature     = BitConverter.ToSingle(byteArray, paramPositions[index++]);
            dataModel.Radiator2Temperature     = BitConverter.ToSingle(byteArray, paramPositions[index++]);
            dataModel.FootstepTemperature      = BitConverter.ToSingle(byteArray, paramPositions[index++]);
            dataModel.TurbineTemperature       = BitConverter.ToSingle(byteArray, paramPositions[index++]);
            dataModel.OilTemperature           = BitConverter.ToSingle(byteArray, paramPositions[index++]);
            dataModel.TransformatorTemperature = BitConverter.ToSingle(byteArray, paramPositions[index++]);
            dataModel.CabinTemperature         = BitConverter.ToSingle(byteArray, paramPositions[index++]);
            dataModel.VoltageAkb               = BitConverter.ToSingle(byteArray, paramPositions[index++]);
            dataModel.Heater1FuelConsumption   = BitConverter.ToSingle(byteArray, paramPositions[index++]);
            dataModel.Heater2FuelConsumption   = BitConverter.ToSingle(byteArray, paramPositions[index++]);
            dataModel.AirHeaterFuelConsumption = BitConverter.ToSingle(byteArray, paramPositions[index++]);

            dataModel.Heater1Flags   = BitConverter.ToUInt16(byteArray, paramPositions[index++]);
            dataModel.Heater2Flags   = BitConverter.ToUInt16(byteArray, paramPositions[index++]);
            dataModel.AirHeaterFlags = BitConverter.ToUInt16(byteArray, paramPositions[index++]);

            dataModel.SystemFlags = byteArray[paramPositions[index++]];
            dataModel.CrcData     = BitConverter.ToUInt16(byteArray, paramPositions[index]);

            serverComputedCrc = Crc16Calculator.ComputeCrc16Bit(byteArray, byteArray.Length - 2);

            return(dataModel);
        }
示例#2
0
        // PUT: api/Trains
        public HttpResponseMessage Put()
        {
            // Достать из зарпоса контент
            var content = Request.Content;
            // Разделить контент на 2 части
            var contentStrings = content.ReadAsStringAsync().Result.Split('=');

            // Создать модель данных
            TrainDataEntity model = new TrainDataEntity();
            var             newId = -1;
            ushort          serverCrc;

            // Попробовать разобрать контент и преобразовать в объект
            try
            {
                model = ParameterParser.GetDataModelFromInputString(
                    contentStrings[0].Substring(4),
                    contentStrings[1], out serverCrc);

                // Если CRC совпадает - сохранить данные в базу
                if (serverCrc == model.CrcData)
                {
                    newId = _repository.Save(model);
                }
            }
            catch (Exception exception)
            {
                serverCrc = 0;
            }

            // Отправить ответ источнику запроса
            var response = Request.CreateResponse(HttpStatusCode.OK, new ResponseModel
            {
                Message = $"Is successful received: {newId != -1}; computed CRC: {serverCrc}; actual CRC: {model.CrcData}; new Id is: {newId}"
            });

            return(response);
        }