Пример #1
0
        public async Task ProcessNewAlarm(OnOffCameraContruct alarm)
        {
            using (var sync = await alarmTimersLock.LockAsync(cancellationToken).ConfigureAwait(false))
            {
                bool sendNow = false;
                if (!alarmsData.TryGetValue(alarm.Id, out var alarmData))
                {
                    alarmData = new AlarmData(alarm);
                    alarmsData.Add(alarm.Id, alarmData);

                    //first time alarm, send
                    sendNow = true;
                }

                if (alarm.Active)
                {
                    // becoming active from inactive, send
                    if (!sendNow && !alarmData.state)
                    {
                        sendNow = true;
                    }

                    alarmData.state          = true;
                    alarmData.CameraContruct = alarm;
                    alarmData.lastReceived.Restart();
                    Trace.WriteLine($"[{cameraName}]New alarm {alarmData.CameraContruct.Id}");
                }
                else
                {
                    // do not send alarm here as need to honor interval
                }


                if (sendNow)
                {
                    await SendAlarm(alarm, alarmData).ConfigureAwait(false);
                }
            }
        }
Пример #2
0
 public AlarmData(OnOffCameraContruct cameraContruct)
 {
     CameraContruct = cameraContruct;
 }
Пример #3
0
 private async Task SendAlarm(OnOffCameraContruct alarm, AlarmData alarmData)
 {
     alarmData.lastUpdated.Restart();
     await enqueue(alarm).ConfigureAwait(false);
 }