Ejemplo n.º 1
0
        // Methods

        private async Task <bool> Initialize()
        {
            // Copy data from database in memory
            using (DomoCoreDbContext context = new DomoCoreDbContext())
            {
                using (DomoCoreInMemDbContext memContext = contextFactory.CreateContext())
                {
                    foreach (var input in context.Inputs)
                    {
                        await memContext.Inputs.AddAsync(
                            new Models.Input
                        {
                            Id            = input.Id,
                            HWValue       = input.HWValue,
                            CurrentState  = input.CurrentState,
                            PreviousState = input.PreviousState,
                            DeviceId      = input.DeviceId,
                            Changed       = input.Changed
                        });
                    }

                    foreach (var output in context.Outputs)
                    {
                        await memContext.Outputs.AddAsync(
                            new Models.Output
                        {
                            Id       = output.Id,
                            State    = output.State,
                            HWValue  = output.HWValue,
                            DeviceId = output.DeviceId
                        });
                    }

                    foreach (var simpleOutput in context.SimpleOutputs)
                    {
                        await memContext.SimpleOutputs.AddAsync(
                            new Models.SimpleOutput
                        {
                            Id              = simpleOutput.Id,
                            Name            = simpleOutput.Name,
                            InputId         = simpleOutput.InputId,
                            OutputId        = simpleOutput.OutputId,
                            AutoOff         = simpleOutput.AutoOff,
                            AutoOffTimeSecs = simpleOutput.AutoOffTimeSecs,
                            State           = simpleOutput.State
                        });
                    }

                    foreach (var device in context.Devices)
                    {
                        await memContext.Devices.AddAsync(
                            new Models.Device
                        {
                            Id      = device.Id,
                            Address = device.Address,
                            Name    = device.Name
                        }
                            );
                    }

                    await memContext.SaveChangesAsync();
                }
            }

            logger.LogDebug("Database copied to memory");

            await client.SetOutputsAsync(new OutputValue { Value = 0 });

            logger.LogDebug("Outputs switched off");

            return(true);
        }