public Task Connect(ConnectDeviceRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }
            if (string.IsNullOrWhiteSpace(request.Username))
            {
                throw new ArgumentException("Username is required", nameof(request));
            }
            if (string.IsNullOrWhiteSpace(request.Password))
            {
                throw new ArgumentException("Password is required", nameof(request));
            }

            var fifthplayDevices = GetFifthplayDevices(request);

            _credentialsRepository.SaveFifthplay(request.Username, request.Password);

            var knownFifthplayDevices = _deviceRepository.GetAll().Where(d => d.Type == DeviceType.Fifthplay);
            var devicesToAdd          = fifthplayDevices.Where(d => !knownFifthplayDevices.Any(k => k.Identifier == d.Identifier));
            var devicesToUpdate       = fifthplayDevices.Where(d => knownFifthplayDevices.Any(k => k.Identifier == d.Identifier));
            var devicesToDelete       = knownFifthplayDevices.Where(d => !fifthplayDevices.Any(f => f.Identifier == d.Identifier));

            _deviceRepository.Add(devicesToAdd);
            _deviceRepository.Update(devicesToUpdate);
            _deviceRepository.Delete(devicesToDelete);

            return(Task.FromResult(true));
        }
        private IEnumerable <Device> GetFifthplayDevices(ConnectDeviceRequest request)
        {
            var energyDevices = _fifthplayRepository.GetEnergyDevices(request.Username, request.Password);
            var thermostats   = _fifthplayRepository.GetThermostats(request.Username, request.Password);
            var devices       = _fifthplayRepository.GetDevices(request.Username, request.Password);

            Task.WaitAll(energyDevices, thermostats, devices);

            return(energyDevices.Result
                   .Union(thermostats.Result)
                   .Union(devices.Result));
        }
Пример #3
0
        protected override void Arrange()
        {
            CredentialsRepository = new MockCredentialRepository();
            DeviceRepository      = new MockDeviceRepository();
            FifthplayRepository   = new MockFifthplayRepository();

            Service = new FifthplayDeviceConnector(
                FifthplayRepository, CredentialsRepository, DeviceRepository);

            Request = new ConnectDeviceRequest
            {
                Username = "******",
                Password = "******"
            };
        }
        private async Task ConnectDevices()
        {
            await DispatcherHelper.RunAsync(() => IsLoading = true);

            var request = new ConnectDeviceRequest {
                Username = Email, Password = Password
            };

            try
            {
                await _deviceConnector.Connect(request);
            }
            finally
            {
                await DispatcherHelper.RunAsync(() => IsLoading = false);
            }
        }