private void Initialize(LockOptions lockOptions, IGpioPinFactory gpioPinFactory, LockDbContext lockDbContext) { DateTime now = DateTime.Now; async Task InitializeLock(LockConfiguration lockConfiguration) { LockDto lockDto = await lockDbContext.Locks.FindAsync(lockConfiguration.Id); LockState mode = lockDto?.State ?? LockState.Locked; bool timedOut = lockDto?.Timeout <= now; if (timedOut) { mode = mode.Toggle(); } Lock @lock = new Lock(lockConfiguration.Id, gpioPinFactory.CreatePin((BcmPin)lockConfiguration.Pin), (LockState)(-1)); if (!timedOut) { @lock.Timeout = lockDto?.Timeout; } await SetAsync(@lock, mode, "INITIALIZE"); IdToLock.Add(@lock.Id, @lock); } Task.WaitAll(lockOptions.LockConfigurations.Select(InitializeLock).ToArray()); UpdateTimerAsync().Wait(); }
public LockManager(ILoggerFactory loggerFactory, IGpioPinFactory gpioPinFactory, IOptions <LockOptions> lockOptions, LockDbContext lockDbContext) { IdToLock = new Dictionary <string, Lock>(); Logger = loggerFactory.CreateLogger <LockManager>(); LockDbContext = lockDbContext; Timer = new Timer(TimerExpired); TimerSemaphore = new SemaphoreSlim(1); Initialize(lockOptions.Value, gpioPinFactory, lockDbContext); }
public WaterSystem(IWaterControllerFactory waterControllerFactory, IGpioPinFactory gpioPinFactory, ILoggerFactory loggerFactory) { Logger = loggerFactory.CreateLogger <WaterSystem>(); WaterControllerFactory = waterControllerFactory; GpioPinFactory = gpioPinFactory; IdToWaterController = new Dictionary <string, IWaterController>(); IsInitialized = false; }