Update 'access_level_use_limit/AlsResetScript.cs'

This commit is contained in:
Gytis P. 2022-07-05 08:17:40 +00:00
parent 6870a54ee8
commit 08e904acc8
1 changed files with 42 additions and 11 deletions

View File

@ -31,7 +31,7 @@ private readonly Interval[] _accessIntervals =
// Set a list of door names that will be monitored
private readonly string[] _canteenDoors =
{
"Carteen_Door_1", "Carteen_Door_2"
"Canteen_Door_1", "Canteen_Door_2"
};
/// <summary>
@ -49,6 +49,8 @@ private readonly SemaphoreSlim _semaphoreSlim = new(1);
private Timer _timer;
private Timer _lastAccessGrantTimer;
private static readonly ConcurrentDictionary<int, IList<string>> _failedAddOrUpdate = new();
private int? _lastAccessGrantedUserId;
@ -61,13 +63,6 @@ private async Task ResetUsersAccessLevelsAsync()
{
await _semaphoreSlim.WaitAsync();
if (_lastAccessGrantedId.HasValue)
{
await Context.SetEventsDescriptionAsync(new List<int> { (int)_lastAccessGrantedId }, "Ignore");
_lastAccessGrantedId = null;
}
if (File.Exists(_path) is false)
{
Context.LogError("Users file not found");
@ -235,11 +230,19 @@ private async void EventReceived(Event received)
var eventTime = received.Time.ToDateTime().ToLocalTime().TimeOfDay;
if (_accessIntervals.Any(a => a.End > eventTime && eventTime >= a.Start))
var interval = _accessIntervals.FirstOrDefault(a => a.End >= eventTime && a.Start <= eventTime);
if (interval is not null)
{
_lastAccessGrantedId = received.Id;
_lastAccessGrantedId = received.Id;
if (_lastAccessGrantTimer is not null && _lastAccessGrantTimer.Enabled) return;
var timeToIntervalEnd = interval.End - eventTime;
StartLastAccessGrantTimer(timeToIntervalEnd);
}
}
}
else
{
await RemoveUserAccessLevelAsync(received);
@ -293,6 +296,27 @@ private async Task RemoveUserAccessLevelAsync(Event received)
}
}
private void StartLastAccessGrantTimer(TimeSpan interval)
{
_lastAccessGrantTimer = new Timer(interval.TotalMilliseconds);
_lastAccessGrantTimer.Elapsed += async (_, _) => await OnLastAccessGrantEvent();
_lastAccessGrantTimer.AutoReset = false;
_lastAccessGrantTimer.Start();
}
private async Task OnLastAccessGrantEvent()
{
if (_lastAccessGrantedId.HasValue)
{
await Context.SetEventsDescriptionAsync(new List<int> { (int)_lastAccessGrantedId }, "Ignore");
_lastAccessGrantedId = null;
}
}
private async Task OnResetEvent()
{
_timer.Interval = new TimeSpan(24, 0, 0).TotalMilliseconds;
@ -330,4 +354,11 @@ _timer.Stop();
_timer.Dispose();
if (_lastAccessGrantTimer is not null)
{
_lastAccessGrantTimer.Stop();
_lastAccessGrantTimer.Dispose();
}
Context.LogInformation("Script stopped");