Exemple #1
0
        /// <summary>
        /// Pokrece se svaki mesec, i vrsi racunanje trenutne potrosnje za prethodni mesec
        /// </summary>
        public override void Collector()
        {
            Console.WriteLine(DateTime.Now + ": Monthly job is running...");

            // Ceka signal od DailyJob-a da je zavrsio posao
            DJ_MJ_Semapthore.WaitOne();

            // Inicijalizacija Tabele
            TableInitializer <DailyItem, MonthlyItem>();

            // Signalizira AnnualJob-u da moze da pocne
            MJ_YJ_Semapthore.Release();

            while (true)
            {
                DateTime current = DateTime.Now;

                // Pocetak meseca
                DateTime startTime = CalculateStartInterval(current);

                // Kraj meseca
                DateTime endTime = CalculateEndInterval(startTime);

                Console.WriteLine(DateTime.Now + ": Monthly job sleeps...");

                while (true)
                {
                    // Trenutno vreme
                    current = DateTime.Now;

                    // Vreme koliko treba da se spava
                    int sleepTime = (int)((endTime - current).TotalMilliseconds);

                    if (sleepTime < 0)
                    {
                        Thread.Sleep(Int32.MaxValue);
                    }
                    else
                    {
                        Thread.Sleep(sleepTime);
                        break;
                    }
                }

                // Ceka signal od DailyJob-a da je zavrsio posao
                DJ_MJ_Semapthore.WaitOne();

                Console.WriteLine(DateTime.Now + ": Monthly job calculates...");

                CalculateAndStore <DailyItem, MonthlyItem>(startTime, endTime);

                // Ako je to decembar, poslednji dan u godini, i poslednji sat u danu tada treba da se aktivira AnnualJob
                if (current.Month == 12 && current.Day == DateTime.DaysInMonth(current.Year, current.Month) && current.Hour == 23)
                {
                    // Signalizira AnnualJob-u da moze da pocne
                    MJ_YJ_Semapthore.Release();
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// Pokrece se svaki dan u 24h, i vrsi racunanje trenutne potrosnje za prethodni dan
        /// </summary>
        public override void Collector()
        {
            Console.WriteLine(DateTime.Now + ": Daily job is running...");

            // Ceka znak od HourlyJob-a da je zavrsio pa da moze da odradi svoj posao
            HJ_DJ_Semapthore.WaitOne();

            // Inicijalizacija Tabele
            TableInitializer <HourlyItem, DailyItem>();

            // Obavesti MonthlyJob da moze da pocne
            DJ_MJ_Semapthore.Release();

            while (true)
            {
                // Trenutno vreme
                DateTime current = DateTime.Now;

                // Pocetak dana
                DateTime startTime = CalculateStartInterval(current);

                // 23:59 min - kraj dana
                DateTime endTime = CalculateEndInterval(startTime);

                // Vreme koliko treba da se spava do prvog okruglog sata
                int sleepTime = (int)(endTime - current).TotalMilliseconds;

                Console.WriteLine(DateTime.Now + ": Daily job sleeps...");

                // Spava do kraja dana
                Thread.Sleep(sleepTime);

                // Ceka znak od HourlyJob-a da je zavrsio pa da moze da odradi svoj posao
                HJ_DJ_Semapthore.WaitOne();

                Console.WriteLine(DateTime.Now + ": Daily job calculates...");

                CalculateAndStore <HourlyItem, DailyItem>(startTime, endTime);

                // Ako je to zadnji dan u mesecu i kraj dana onda treba da se aktivira MonthlyJob
                if (current.Day == DateTime.DaysInMonth(current.Year, current.Month) && current.Hour == 23)
                {
                    // Obavesti MonthlyJob da moze da pocne
                    DJ_MJ_Semapthore.Release();
                }
            }
        }