Update 'access_level_use_limit/AlsResetScript.cs'
This commit is contained in:
parent
6870a54ee8
commit
08e904acc8
|
@ -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");
|
Loading…
Reference in New Issue