コード例 #1
0
        private async Task <IEnumerable <DeviceStateAttemptResult> > ResolveAsync(IEnumerable <IDeviceAdapter> devices, CancellationToken token)
        {
            List <DeviceStateAttemptResult> results = new List <DeviceStateAttemptResult>();

            try
            {
                foreach (var device in devices)
                {
                    token.ThrowIfCancellationRequested();

                    DeviceStateAttempt attempt = null;
                    if (_attempts.CanAttemptCommand(device.Code.DeviceType, device.State, out attempt) &&
                        device.RecentCommandExecution.IsWorking == false)
                    {
                        _logger.Info(LogHelper.Prepare($"Device: {device.Code.DeviceType.Code}, State: {attempt.TargetState}, Attempts: {attempt.Attempts}"));

                        DeviceStateAttemptResult result = await AttemptDeviceToStateAsync(device, attempt.TargetState, token);

                        attempt.AddResult(result.Result);

                        results.Add(result);
                    }
                }
            }
            catch (OperationCanceledException)
            {
                _logger.Info(LogHelper.Prepare("Cancelled"));
            }

            return(results);
        }
コード例 #2
0
ファイル: DeviceStateAttempts.cs プロジェクト: uxifiit/UXC
        public void DisableAttempt(DeviceType device)
        {
            DeviceStateAttempt attempt = null;

            if (_attempts.TryGetValue(device, out attempt))
            {
                attempt.IsEnabled = false;
            }
        }
コード例 #3
0
ファイル: DeviceStateAttempts.cs プロジェクト: uxifiit/UXC
        public DeviceStateAttempt SetAttempt(DeviceType device, DeviceState state)
        {
            DeviceStateAttempt attempt;

            if (_attempts.TryGetValue(device, out attempt))
            {
                attempt.TargetState = state;
            }
            else
            {
                attempt = new DeviceStateAttempt(state);
                _attempts.TryAdd(device, attempt);
            }

            attempt.IsEnabled = true;

            return(attempt);
        }
コード例 #4
0
ファイル: DeviceStateAttempts.cs プロジェクト: uxifiit/UXC
 public bool CanAttemptCommand(DeviceType device, DeviceState state, out DeviceStateAttempt attempt)
 {
     return(_attempts.TryGetValue(device, out attempt) &&
            attempt.IsEnabled &&
            attempt.TargetState != state);
 }