コード例 #1
0
        public void Update(int id, string location, string name, string type)
        {
            var cache  = new InMemoryRepositoryModelCache();
            var device = _deviceRepository.Get(_user, id, cache);

            device.Update(
                location: location == null ? device.Location : new Location(location),
                name: name ?? device.Name,
                type: type ?? device.Type
                );

            _deviceRepository.Update(device);

            var computerRepository = _repositoryFactory.GetComputerRepository();
            var scriptRepository   = _repositoryFactory.GetScriptRepository();
            var taskRepository     = _repositoryFactory.GetTaskRepository();
            var runScript          = new Computer.Actions.RunScript(computerRepository, scriptRepository, taskRepository);

            runScript.Run(
                computer: device.Network.AttatchedComputer,
                scriptText: "HomeAutomation.SyncWithCloud Network=\"" + device.Network.Address + "\"",
                source: "RoomieBot",
                updateLastRunScript: false,
                user: _user
                );
        }
コード例 #2
0
ファイル: ScriptController.cs プロジェクト: Mavtak/roomie
        private string Clean(int?timeout)
        {
            if (timeout < 1)
            {
                timeout = null;
            }

            var        cache   = new InMemoryRepositoryModelCache();
            var        deleted = 0;
            var        skipped = 0;
            ListFilter filter  = null;


            DoWork.UntilTimeout(timeout ?? 5, () =>
            {
                var result = _scriptRepository.Clean(_taskRepository, _computerRepository, filter, cache);

                deleted += result.Deleted;
                skipped += result.Skipped;
                filter   = result.NextFilter;

                return(result.Done);
            });

            return(deleted + " scripts cleaned up, " + skipped + " scripts skipped");
        }
コード例 #3
0
        public Persistence.Models.Task[] Run(Persistence.Models.Computer computer, TimeSpan?timeout, TimeSpan?pollInterval)
        {
            timeout      = timeout ?? TimeSpan.FromSeconds(90);
            pollInterval = pollInterval ?? TimeSpan.FromSeconds(1 / 4);

            Persistence.Models.Task[] tasks = null;

            var endTime = DateTime.Now.Add(timeout.Value);

            while (true)
            {
                computer.UpdatePing();
                _computerRepository.Update(computer);

                var now   = DateTime.UtcNow;
                var cache = new InMemoryRepositoryModelCache();
                tasks = _taskRepository.ForComputer(computer, now, cache);

                if (tasks.Length > 0 || DateTime.Now >= endTime)
                {
                    foreach (var task in tasks)
                    {
                        task.MarkAsReceived();
                        _taskRepository.Update(task);
                    }

                    return(tasks);
                }

                System.Threading.Thread.Sleep(pollInterval.Value);
            }
        }
コード例 #4
0
ファイル: RpcNetworkRepository.cs プロジェクト: Mavtak/roomie
        public Response <Persistence.Models.Network> Read(int id)
        {
            var cache   = new InMemoryRepositoryModelCache();
            var network = _networkRepository.Get(_user, id, cache);
            var result  = GetSerializableVersion(network);

            return(Response.Create(result));
        }
コード例 #5
0
        public Response <Persistence.Models.Computer> Read(string accessKey)
        {
            var cache    = new InMemoryRepositoryModelCache();
            var computer = _computerRepository.Get(accessKey, cache);
            var result   = GetSerializableVersion(computer);

            return(Response.Create(result));
        }
コード例 #6
0
        public Response <Persistence.Models.UserSession> Read(string token)
        {
            var cache   = new InMemoryRepositoryModelCache();
            var session = _sessionRepository.GetUserSession(token, cache);
            var result  = GetSerializableVersion(session);

            return(Response.Create(result));
        }
コード例 #7
0
        public Response <Persistence.Models.Device> Read(int id)
        {
            var cache  = new InMemoryRepositoryModelCache();
            var device = _deviceRepository.Get(_user, id, cache);
            var result = GetSerializableVersion(device);

            return(Response.Create(result));
        }
コード例 #8
0
        public Response <Persistence.Models.Computer[]> List()
        {
            var cache     = new InMemoryRepositoryModelCache();
            var computers = _computerRepository.Get(_user, cache);
            var result    = computers.Select(GetSerializableVersion)
                            .ToArray();

            return(Response.Create(result));
        }
コード例 #9
0
        public Response RunScript(int id, string script, string source = null)
        {
            var cache    = new InMemoryRepositoryModelCache();
            var computer = _computerRepository.Get(_user, id, cache);

            if (computer == null)
            {
                return(RpcComputerRepositoryHelpers.CreateNotFoundError());
            }

            return(RunScript(computer, script, source));
        }
コード例 #10
0
        public Response TemperatureSensorPoll(int id)
        {
            var cache  = new InMemoryRepositoryModelCache();
            var device = _deviceRepository.Get(_user, id, cache);

            if (device == null)
            {
                return(RpcDeviceRepositoryHelpers.CreateNotFoundError());
            }

            device.TemperatureSensor.Poll();

            return(Response.Empty());
        }
コード例 #11
0
        public Response MultilevelSwitchSetPower(int id, int power)
        {
            var cache  = new InMemoryRepositoryModelCache();
            var device = _deviceRepository.Get(_user, id, cache);

            if (device == null)
            {
                return(RpcDeviceRepositoryHelpers.CreateNotFoundError());
            }

            device.MultilevelSwitch.SetPower(power);

            return(Response.Empty());
        }
コード例 #12
0
ファイル: RpcNetworkRepository.cs プロジェクト: Mavtak/roomie
        public Response RemoveDevice(int id)
        {
            var cache   = new InMemoryRepositoryModelCache();
            var network = _networkRepository.Get(_user, id, cache);

            if (network == null)
            {
                return(RpcNetworkRepositoryHelpers.CreateNotFoundError());
            }

            NetworkAction(network, "RemoveDevice");

            return(Response.Empty());
        }
コード例 #13
0
        public Response ThermostatCoreSetMode(int id, string mode)
        {
            var parsedMode = mode.ToThermostatMode();
            var cache      = new InMemoryRepositoryModelCache();
            var device     = _deviceRepository.Get(_user, id, cache);

            if (device == null)
            {
                return(RpcDeviceRepositoryHelpers.CreateNotFoundError());
            }

            device.Thermostat.Core.SetMode(parsedMode);

            return(Response.Empty());
        }
コード例 #14
0
        public Response ColorSwitchSetValue(int id, string color)
        {
            var parsedColor = color.ToColor();
            var cache       = new InMemoryRepositoryModelCache();
            var device      = _deviceRepository.Get(_user, id, cache);

            if (device == null)
            {
                return(RpcDeviceRepositoryHelpers.CreateNotFoundError());
            }

            device.ColorSwitch.SetValue(parsedColor);

            return(Response.Empty());
        }
コード例 #15
0
ファイル: RpcTaskRepository.cs プロジェクト: Mavtak/roomie
        public Response <Persistence.Models.Task[]> GetForComputer(string computerName, TimeSpan?timeout = null, TimeSpan?pollInterval = null)
        {
            var cache = new InMemoryRepositoryModelCache();
            var computerRepository = _repositoryFactory.GetComputerRepository();
            var computer           = _computer ?? computerRepository.Get(_user, computerName, cache);

            var taskRepository = _repositoryFactory.GetTaskRepository();
            var getTasks       = new Actions.GetForComputer(computerRepository, taskRepository);
            var tasks          = getTasks.Run(computer, timeout, pollInterval);
            var result         = tasks
                                 .Select(GetSerializableVersion)
                                 .ToArray();

            return(Response.Create(result));
        }
コード例 #16
0
ファイル: RpcNetworkRepository.cs プロジェクト: Mavtak/roomie
        public Response Update(int id, string name)
        {
            var cache   = new InMemoryRepositoryModelCache();
            var network = _networkRepository.Get(_user, id, cache);

            if (network == null)
            {
                return(RpcNetworkRepositoryHelpers.CreateNotFoundError());
            }

            network.UpdateName(name);
            _networkRepository.Update(network);

            return(Response.Empty());
        }
コード例 #17
0
        public Response BinarySwitchSetPower(int id, string power)
        {
            var parsedPower = power.ToToggleSwitchPower();
            var cache       = new InMemoryRepositoryModelCache();
            var device      = _deviceRepository.Get(_user, id, cache);

            if (device == null)
            {
                return(RpcDeviceRepositoryHelpers.CreateNotFoundError());
            }

            device.BinarySwitch.SetPower(parsedPower);

            return(Response.Empty());
        }
コード例 #18
0
ファイル: RpcTaskRepository.cs プロジェクト: Mavtak/roomie
        public Response <Page <Persistence.Models.Task> > List(int count = 50, string sortDirection = null, int start = 0)
        {
            var filter = new ListFilter
            {
                Count         = count,
                SortDirection = sortDirection == null ? SortDirection.Descending : EnumParser.Parse <SortDirection>(sortDirection),
                Start         = start,
            };

            var cache  = new InMemoryRepositoryModelCache();
            var result = _taskRepository.List(_user, filter, cache)
                         .Transform(GetSerializableVersion);

            return(Response.Create(result));
        }
コード例 #19
0
        public Response RenewWebHookKeys(int id)
        {
            var cache    = new InMemoryRepositoryModelCache();
            var computer = _computerRepository.Get(_user, id, cache);

            if (computer == null)
            {
                return(RpcComputerRepositoryHelpers.CreateNotFoundError());
            }

            computer.RenewWebhookKeys();
            _computerRepository.Update(computer);

            return(Response.Empty());
        }
コード例 #20
0
        public Response ThermostatSetpointsSetSetpoint(int id, string type, string temperature)
        {
            var parsedType        = type.ToSetpointType();
            var parsedTemperature = temperature.ToTemperature();
            var cache             = new InMemoryRepositoryModelCache();
            var device            = _deviceRepository.Get(_user, id, cache);

            if (device == null)
            {
                return(RpcDeviceRepositoryHelpers.CreateNotFoundError());
            }

            device.Thermostat.Setpoints.SetSetpoint(parsedType, parsedTemperature);

            return(Response.Empty());
        }
コード例 #21
0
ファイル: RpcNetworkRepository.cs プロジェクト: Mavtak/roomie
        public Response <Persistence.Models.Network[]> List()
        {
            var cache    = new InMemoryRepositoryModelCache();
            var networks = _networkRepository.Get(_user, cache);

            var deviceRepository = _repositoryFactory.GetDeviceRepository();

            foreach (var network in networks)
            {
                network.LoadDevices(deviceRepository);
            }

            var result = networks.Select(GetSerializableVersion)
                         .ToArray();

            return(Response.Create(result));
        }
コード例 #22
0
ファイル: Clean.cs プロジェクト: Mavtak/roomie
        public string Run(TimeSpan?timeout, Persistence.Models.User user)
        {
            var        cache   = new InMemoryRepositoryModelCache();
            var        deleted = 0;
            var        skipped = 0;
            ListFilter filter  = null;

            DoWork.UntilTimeout(((int?)timeout?.TotalSeconds) ?? 5, () =>
            {
                var result = _taskRepository.Clean(user, filter, cache);

                deleted += result.Deleted;
                skipped += result.Skipped;
                filter   = result.NextFilter;

                return(result.Done);
            });

            return(deleted + " tasks cleaned up, " + skipped + " tasks skipped");
        }
コード例 #23
0
ファイル: RpcNetworkRepository.cs プロジェクト: Mavtak/roomie
        public Response <string[]> SyncWholeNetwork(int id, int computerId, string[] devicesXml)
        {
            var cache   = new InMemoryRepositoryModelCache();
            var network = _networkRepository.Get(_user, id, cache);

            if (network == null)
            {
                return(RpcNetworkRepositoryHelpers.CreateNotFoundError <string[]>());
            }

            var computerRepository = _repositoryFactory.GetComputerRepository();
            var computer           = computerRepository.Get(_user, computerId, cache);

            if (computer == null)
            {
                return(RpcComputerRepositoryHelpers.CreateNotFoundError <string[]>());
            }

            return(SyncWholeNetwork(network, computer, devicesXml));
        }
コード例 #24
0
ファイル: RpcNetworkRepository.cs プロジェクト: Mavtak/roomie
        public Response Delete(int id)
        {
            var cache   = new InMemoryRepositoryModelCache();
            var network = _networkRepository.Get(_user, id, cache);

            if (network == null)
            {
                return(RpcNetworkRepositoryHelpers.CreateNotFoundError());
            }

            var deviceRepository = _repositoryFactory.GetDeviceRepository();

            foreach (var device in deviceRepository.Get(network, cache))
            {
                deviceRepository.Remove(device);
            }

            _networkRepository.Remove(network);

            return(Response.Empty());
        }
コード例 #25
0
        public Response <Persistence.Models.Device[]> List(bool examples = false)
        {
            Persistence.Models.Device[] devices;

            if (examples)
            {
                devices = Persistence.Examples.Devices.ToArray();
            }
            else
            {
                var cache             = new InMemoryRepositoryModelCache();
                var networkRepository = _repositoryFactory.GetNetworkRepository();
                var networks          = networkRepository.Get(_user, cache);
                var unsortedDevices   = networks.SelectMany((id) => _deviceRepository.Get(id, cache)).ToList();
                unsortedDevices.Sort(new DeviceSort());
                devices = unsortedDevices.ToArray();
            }

            var result = devices.Select(GetSerializableVersion).ToArray();

            return(Response.Create(result));
        }