Ejemplo n.º 1
0
        private void CheckAlarmConditions()
        {
            try
            {
                if (isStarted)
                {
                    _alarmMails = GetAlarmMails();
                    // Her alarmın koşulu kontrol edilir.
                    foreach (AlarmMail alarmMail in _alarmMails)
                    {
                        // Alarm koşulu içerisindeki sinyal isimleri anlık değerler ile değiştirilir.
                        string logicTextWithVariables = ReplaceVariableNamesWithVariableValues(alarmMail.LogicText);

                        // Logicte yazım hatası, sinyal ismi bulunamaması vb durumu varsa ReplaceVariableNamesWithVariableValues methodundan logicText null olarak doner.
                        // Aksi durumda işlem devam eder.
                        if (logicTextWithVariables != null)
                        {
                            // Güncel değerlerin yer aldığı logictext dynamic olarak çalıştırılır.
                            int calculatedValue = CalculateLogic(logicTextWithVariables);

                            bool result = calculatedValue > 0;

                            // Logic sonucu kaydedilen önceki sonuç ile aynı değilse, logic sonucu değişmis ise
                            if (result != alarmMail.Status)
                            {
                                // yeni sonuc database'de kaydedilir.
                                alarmMail.Status = result;
                                DBHelper_MailClient.UpdateMailAlarmStatus(alarmMail);

                                // logic sonucu true ise e-mail gönderme işlemleri başlatılır.
                                if (result == true)
                                {
                                    // mail alarm'a atanmıs gecikme suresi yoksa e-posta anında gönderilir.
                                    if (alarmMail.Delaytime == 0)
                                    {
                                        SendMailAsync(alarmMail);
                                    }
                                    // eğer mail alarm'a atanmış gecikme süresi varsa girilen süre sonra logic'in değerinin tekrardan kontrol edilmesi için timer olusturulur.
                                    else
                                    {
                                        MailClientTimer mailClientTimer = new MailClientTimer(alarmMail);
                                        mailClientTimer.TimerElapsed += MailClientTimer_TimerElapsed;
                                        mailClientTimers.Add(mailClientTimer);
                                        mailClientTimer.Start();
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Instance.Error("MailClient sürücüsü beklenmedik bir hata ile karşılaştı => {0}", ex.Message);
            }
        }
Ejemplo n.º 2
0
        private void MailClientTimer_TimerElapsed(object source, MailClientTimerEventArgs args)
        {
            MailClientTimer mailClientTimer = (MailClientTimer)source;

            mailClientTimer.Stop();
            try
            {
                string logicTextWithVariables = ReplaceVariableNamesWithVariableValues(args.alarmMail.LogicText);
                int    result = CalculateLogic(logicTextWithVariables);
                // Logic hala true donuyorsa e-mail gonderilir.
                if (result > 0)
                {
                    SendMailAsync(args.alarmMail);
                }
                mailClientTimers.Remove(mailClientTimer);
            }
            catch (Exception ex)
            {
                Log.Instance.Error("{0} isimli alarm için mail gonderilemedi => {1}", args.alarmMail.Name, ex.Message);
                throw;
            }
        }