private async void _alarmRepository_AlarmChanged(object sender, AlarmChangedEventArgs e) { // Only handle closed alarms if (e.Alarm.StateId != BuiltInAlarmStates.Closed) { return; } // If all alarms for this source and event type are closed in VMS, close corresponding alarm in the Demo Access Control system var doorId = e.Alarm.ExternalSourceId; var eventTypeId = e.Alarm.ExternalEventTypeId; var alarms = _alarmRepository.GetAlarmsForSource(doorId, eventTypeId, false); if (!alarms.Any()) { try { await _client.CloseAlarmAsync(doorId, eventTypeId); } catch (DemoApplicationClientException ex) { // A retry mechanism would probably be in order... ACUtil.Log(true, "DemoACPlugin.AlarmManager", "Error closing alarm in Demo Access Control system: " + ex.Message); } } }