Ejemplo n.º 1
0
        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, ""));
        }