Exemple #1
0
        public List <MSchedule> GetSchedule(string idSchedule)
        {
            List <MSchedule> scheduleList = new List <MSchedule>();

            {
                sqlCon = con.openConnection();
                SqlCommand     cmd = new SqlCommand("select * from Doctor.ScheduleDetails where Id_Schedule = '" + idSchedule + "'", sqlCon);
                SqlDataAdapter da  = new SqlDataAdapter(cmd);
                DataTable      dt  = new DataTable();
                da.Fill(dt);
                if (dt.Rows.Count > 0)
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        MSchedule scheduleData = new MSchedule();
                        scheduleData.IdScheduleDetail = dt.Rows[i]["Id_ScheduleDetail"].ToString();
                        scheduleData.IdSchedule       = dt.Rows[i]["Id_Schedule"].ToString();
                        scheduleData.Day   = dt.Rows[i]["Dayy"].ToString();
                        scheduleData.Start = dt.Rows[i]["Start_Time"].ToString();
                        scheduleData.End   = dt.Rows[i]["End_Time"].ToString();
                        scheduleList.Add(scheduleData);
                    }
                }
                sqlCon.Close();
            }
            return(scheduleList);
        }
        /// <summary>
        /// Calculate Sleep ms
        /// </summary>
        /// <param name="now"></param>
        /// <returns>miliseconds</returns>
        private long CalculateSleep(long now)
        {
            String frequencyType = _model.GetFrequencyType();
            int    frequency     = _model.GetFrequency();

            if (frequency < 1)
            {
                frequency = 1;
            }

            long typeSec = 600;                 //	10 minutes

            if (frequencyType == null)
            {
                typeSec = 300;                  //	5 minutes
            }
            else if (X_R_RequestProcessor.FREQUENCYTYPE_Minute.Equals(frequencyType))
            {
                typeSec = 60;
            }
            else if (X_R_RequestProcessor.FREQUENCYTYPE_Hour.Equals(frequencyType))
            {
                typeSec = 3600;
            }
            else if (X_R_RequestProcessor.FREQUENCYTYPE_Day.Equals(frequencyType))
            {
                typeSec = 86400;
            }

            long sleep = typeSec * 1000 * frequency;            //	ms

            if (_model.GetAD_Schedule_ID() == 0)
            {
                return(sleep);
            }

            //	Calculate Schedule
            MSchedule schedule = MSchedule.Get(GetCtx(), _model.GetAD_Schedule_ID());
            long      next     = schedule.GetNextRunMS(now);
            long      delta    = next - now;

            if (delta < 0)
            {
                log.Warning("Negative Delta=" + delta + " - set to " + sleep);
                delta = sleep;
            }
            return(delta);
        }
        /// <summary>
        /// Run async
        /// </summary>
        public void Run()
        {
            int       AD_Schedule_ID = _model.GetAD_Schedule_ID();
            MSchedule schedule       = null;

            if (AD_Schedule_ID != 0)
            {
                schedule = MSchedule.Get(GetCtx(), AD_Schedule_ID);
                if (!schedule.IsOKtoRunOnIP())
                {
                    log.Warning(objThread.Name + ": Stopped - IP Restriction " + schedule);
                    return;             //	done
                }
            }

            try
            {
                log.Fine(objThread.Name + ": Pre-Nap - " + _initialNap);
                Thread.Sleep(_initialNap * 1000);
            }
            catch (ThreadInterruptedException e)
            {
                log.Log(Level.SEVERE, objThread.Name + ": Pre-Nap Interrupted", e);
                return;
            }

            _start = CommonFunctions.CurrentTimeMillis(DateTime.Now);
            while (true)
            {
                long now = CommonFunctions.CurrentTimeMillis(DateTime.Now);
                if (_sleepMS == 0)
                {
                    _sleepMS = CalculateSleep(now);
                }
                DateTime scheduled   = CommonFunctions.CovertMilliToDate(now + _sleepMS);
                DateTime?dateNextRun = null;
                if (_nextWork == 0)
                {
                    _nextWork   = now + _sleepMS;
                    dateNextRun = GetDateNextRun(true);
                    _model.SetDateNextRun(dateNextRun);
                    _model.Save();
                }
                else
                {
                    dateNextRun = CommonFunctions.CovertMilliToDate(_nextWork);
                }

                log.Config(this.objThread.Name + ": NextWork=" + dateNextRun + " - Scheduled=" + scheduled);

                //	---------------
                _startWork = CommonFunctions.CurrentTimeMillis(DateTime.Now);
                DoWork();
                now = CommonFunctions.CurrentTimeMillis(DateTime.Now);
                //	---------------

                _runCount++;
                _runLastMS   = now - _startWork;
                _runTotalMS += _runLastMS;
                //
                _sleepMS  = CalculateSleep(now);
                _nextWork = now + _sleepMS;
                //
                _model.SetDateLastRun(CommonFunctions.CovertMilliToDate(now));
                _model.SetDateNextRun(CommonFunctions.CovertMilliToDate(_nextWork));
                _model.Save();

                log.Fine(objThread.Name + ": " + GetStatistics());
                if (!Sleep())
                {
                    break;
                }
            }
            _start = 0;
        }