Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
 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);
 }
Ejemplo n.º 3
0
        public WaterSystem(IWaterControllerFactory waterControllerFactory, IGpioPinFactory gpioPinFactory, ILoggerFactory loggerFactory)
        {
            Logger = loggerFactory.CreateLogger <WaterSystem>();

            WaterControllerFactory = waterControllerFactory;
            GpioPinFactory         = gpioPinFactory;

            IdToWaterController = new Dictionary <string, IWaterController>();
            IsInitialized       = false;
        }