/// <summary> /// Метод повторной смены маски детекции /// </summary> public static async Task <string> ChangeDetectionMaskFromBody([FromBody] DetectionData.GridFromDB data) { _logger.Info("[ChangeDetectionMaskFromBody] Method started"); byte[] hexValues = { 8, 4, 2, 1 }; // Значения для конвертирования входящей маски в понятный для камеры вид StringBuilder gridMap = new(); // объявление итоговой маски для камеры try { var splittedArray = data.dbGridMap.Split(22); // Маска поступает из 396 значений, разделить их на многомерный массив по 22 значения var sum = 0; // сумма значений в массиве на основе hexValues foreach (var value in splittedArray) // Выбрать получившиеся массивы разделённые по 22 значения { foreach (var value2 in value.Split(4)) // раделить полученные ранее массивы по 22 элемента - ещё по 4 { for (var i = 0; i < value2.Length; i++) { if ((int)char.GetNumericValue(value2[i]) == 1) // строку конвертим в charArray, и извлекаем из него int значение. Если пришедшее значение = 1(ячейка активирована) { sum += hexValues[i]; // ..то извлекаем значение из hexValues и находим сумму значений многомерного массива(4 значения) } else { sum += 0; // Если значение 0, то оставляем сумму без изменений } } gridMap.Append(sum.ToString("x")); // Конвертируем итоговую сумму первого многомерного массива в 16-ричную систему и помещаем в конец StringBuilder sum = 0; //сбрасываем результат предыдущих вычислений } } var objData = new DetectionData.MotionDetectionLayout { sensitivityLevel = 60, layout = new DetectionData.Layout { gridMap = gridMap.ToString() } }; using var xmlData = Converters.ToStringContent(objData, "MotionDetectionGridLayout"); var response = await WebClient.Client.PutAsync("System/Video/inputs/channels/1/motionDetection/layout/gridLayout", xmlData).Result.Content.ReadAsStringAsync(); var jsonResponse = Converters.XmlToJson(response); var responseData = JsonConvert.DeserializeObject <CamResponses>(jsonResponse); _logger.Info("[ChangeDetectionMaskFromBody] Method has complete"); return($"{responseData.responseStatus.StatusString,-5} Request url {responseData.responseStatus.RequestUrl}"); } catch (Exception e) { _logger.Error($"[ChangeDetectionMaskFromBody] Method failed. \nError message: {e.Message}"); return(e.Message); } }
public async Task <string> ChangeDetectionMaskFromBody([FromBody] DetectionData.GridFromDB data) { var authStatus = CheckClient(data.id, out string rtspIp); switch (authStatus) { case 200: { _logger.Info("[ChangeDetectionMaskFromBody] Auth status 200"); var response = await PutRequests.ChangeDetectionMaskFromBody(data); _logger.Info("[ChangeDetectionMaskFromBody] Configuration is complete. \nMethod has completed"); return(response); } case 401: { _logger.Info("[ChangeDetectionMaskFromBody] Auth status 401. Unauthorized. \nMethod has completed"); return(null); } case 404: { _logger.Info("[ChangeDetectionMaskFromBody] Auth status 404. Device not supported. \nMethod has completed"); return(null); } case 601: { _logger.Info("[ChangeDetectionMaskFromBody] Status 601. Rtsp_ip is null. \nMethod has completed"); return(null); } default: { _logger.Info($"[ChangeDetectionMaskFromBody] Auth status {authStatus}. Default error. \nMethod has completed"); return(null); } } }