Beispiel #1
0
        private void FireEvents(SeanseState prevState, SeanseState state)
        {
            // Eсли перешел в активный
            if (isActiveEnded && prevState != SeanseState.Active && state == SeanseState.Active)
            {
                isActiveEnded = false;
                ActiveStart.Invoke(this, new EventArgs());
            }

            // Если Вышел из активного
            IEnumerable <SignalEntry> activeEntries = signalEntries.Where(x => x.Type != EntryType.Error && x.Size - x.Errors > (int)Mode);

            if (!isActiveEnded && activeEntries.Any() && !(activeEntries.Last().Time > (DateTime.Now - delay).AddMinutes(-config.MinutesToAwaitAfterEnd) && activeEntries.Last().Time <= (DateTime.Now - delay)))
            {
                isActiveEnded = true;
                ActiveEnd.Invoke(this, new EventArgs());
            }

            // Если начал работу
            if (isEnded && state != SeanseState.WorkingLevel0)
            {
                isEnded = false;
                WorkingStart.Invoke(this, new EventArgs());
            }
            // Если окончил работу
            if (!isEnded && signalEntries.Where(x => x.Time > (DateTime.Now - delay).AddMinutes(-config.MinutesToAwaitAfterEnd) && x.Time <= DateTime.Now - delay).Count() == 0)
            {
                isEnded = true;
                WorkingEnd.Invoke(this, new EventArgs());
            }
        }