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); } }
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; } }