private dynamic All(string components, string password, bool isAdminPass, bool isTimeCorrectionEnable, int timeZone) { dynamic dt = GetCounterDt(); if (!dt.success) { log(string.Format("Ошибка при считывании текущего времени: {0}", dt.error), level: 1); return(MakeResult(101, dt.errorcode, dt.error)); } setTimeDifference(DateTime.Now - dt.date); if (getEndDate == null) { getEndDate = (type) => dt.date; } if (components.Contains("Current")) { var current = GetCurrent(dt.date); if (!current.success) { log(string.Format("Ошибка при считывании текущих: {0}", current.error), level: 1); return(MakeResult(102, current.errorcode, current.error)); } List <dynamic> currents = current.records; log(string.Format("Текущие на {0:dd.MM.yyyy HH:mm:ss} прочитаны: всего {1}", dt.date, currents.Count), level: 1); records(currents); } // if (components.Contains("Constant")) { var addr = ParseValueArray(Send(MakeDataRequest("600100FF()"))); if (!addr.success) { log(string.Format("Ошибка при считывании констант: {0}", addr.error), level: 1); return(MakeResult(103, addr.errorcode, addr.error)); } List <dynamic> recs = new List <dynamic>(); recs.Add(MakeConstRecord("Серийный номер", addr.texts[0], dt.date)); log(string.Format("Константы на {0:dd.MM.yyyy HH:mm:ss} прочитаны: всего {1}", dt.date, recs.Count), level: 1); records(recs); } //чтение часовых if (components.Contains("Hour")) { var startH = getStartDate("Hour"); var endH = getEndDate("Hour"); var hour = GetHours(startH, endH, dt.date); if (!hour.success) { log(string.Format("Ошибка при считывании часовых: {0}", hour.error), level: 1); return(MakeResult(105, hour.errorcode, hour.error)); } List <dynamic> hours = hour.records; log(string.Format("Прочитаны часовые с {0:dd.MM.yyyy HH:mm} по {1:dd.MM.yyyy HH:mm}: {2} записей", startH, endH, hours.Count), level: 1); } ///конец чтения часовых //чтение суточных if (components.Contains("Day")) { var startD = getStartDate("Day"); var endD = getEndDate("Day"); var day = GetDays(startD, endD, dt.date); if (!day.success) { log(string.Format("Ошибка при считывании суточных: {0}", day.error), level: 1); return(MakeResult(104, day.errorcode, day.error)); } List <dynamic> days = day.records; log(string.Format("Прочитаны суточные с {0:dd.MM.yyyy} по {1:dd.MM.yyyy}: {2} записей", startD, endD, days.Count), level: 1); } #if TIME_CORRECTION if (isTimeCorrectionEnable) { var cdate = Send(MakeDataRequest("DATE_()")); if (!cdate.success) { return(cdate); } var ctime = Send(MakeDataRequest("TIME_()")); if (!ctime.success) { return(ctime); } DateTime date = DriverHelper.DateTimeFromCounter(cdate.rsp, ctime.rsp); DateTime now = DateTime.Now; DateTime nowTz = now.AddHours(timeZone - TIMEZONE_SERVER); TimeSpan timeDiff = nowTz - date; bool isTimeCorrectable = (timeDiff.TotalSeconds > -TIME_CORRECTION_MAXIMUM_MODULE) && (timeDiff.TotalSeconds < TIME_CORRECTION_MAXIMUM_MODULE); bool isTimeNeedToCorrent = (timeDiff.TotalSeconds >= TIME_NEED_CORRECTION_MODULE) || (timeDiff.TotalSeconds <= -TIME_NEED_CORRECTION_MODULE); //log(string.Format("Дата/время {0:dd.MM.yyyy HH:mm:ss}; расхождение {1} сек.; isTimeCorrectable?{2}, isTimeNeedToCorrent?{3}", date, timeDiff.TotalSeconds, isTimeCorrectable, isTimeNeedToCorrent), 3); if (isTimeCorrectable && isTimeNeedToCorrent) { var timeToSleep = 60000 - (now.Second * 1000 + now.Millisecond) - 500; log(string.Format("Расхождение {1:0.0} сек. - нужна корректировка; спим {0} сек.", timeToSleep / 1000, timeDiff.TotalSeconds), 3); Thread.Sleep(timeToSleep); Send(MakeDataRequest("CTIME()"), 1); log("Произведена корректировка времени"); /*cdate = Send(MakeDataRequest("DATE_()")); * if (!cdate.success) return cdate; * * ctime = Send(MakeDataRequest("TIME_()")); * if (!ctime.success) return ctime; * * date = DriverHelper.DateTimeFromCounter(cdate.rsp, ctime.rsp); * * now = DateTime.Now; * nowTz = now.AddHours(timeZone - TIMEZONE_SERVER); * log(string.Format("Время установлено, расхождение = {0:0.0} сек.", (date - nowTz).TotalSeconds));*/ } } #endif return(MakeResult(0, DeviceError.NO_ERROR, "")); }