/// <summary> /// Gets the variable value asynchronous for the provided <paramref name="variable"/> name. /// </summary> /// <param name="variable">The variable.</param> /// <returns></returns> public async Task<Result<Variable>> GetVariableValueAsync(String variable) { if (variable == null) { throw new ArgumentNullException(nameof(variable)); } Variable vari; vari = await Task.Run(() => variables.FirstOrDefault(i => String.Compare(i.Name, variable) == 0)); if (vari == null) { vari = new Variable(this); vari.Name = variable; } return await GetVariableValueAsync(vari); }
/// <summary> /// Gets the variable value asynchronous for the provided <paramref name="variable"/>. /// </summary> /// <param name="variable">The variable.</param> /// <returns></returns> public async Task<Result<Variable>> GetVariableValueAsync(Variable variable) { if (variable == null) { throw new ArgumentNullException(nameof(variable)); } if (String.IsNullOrWhiteSpace(variable.Name)) { throw new ArgumentException(Messages.PassedVariableMustHaveAName, nameof(variable)); } var svariable = await Task.Run(() => variables.FirstOrDefault(i => i == variable)); if (svariable == null) { ParticleCloud.SyncContext.InvokeIfRequired(() => { variables.Add(variable); }); } try { var response = await cloud.MakeGetRequestAsync($"devices/{Id}/{Uri.EscapeDataString(variable.Name)}"); if (response.StatusCode == System.Net.HttpStatusCode.Unauthorized) { await cloud.RefreshTokenAsync(); response = await cloud.MakeGetRequestAsync($"devices/{Id}/{Uri.EscapeDataString(variable.Name)}"); if (response.StatusCode == System.Net.HttpStatusCode.Unauthorized) { return response.AsResult<Variable>(); } } if (response.StatusCode == System.Net.HttpStatusCode.OK) { var tresult = response.Response.SelectToken("result"); variable.Value = tresult.Value<Object>().ToString(); /* "name": "temperature", "result": 46, "coreInfo": { "name": "weatherman", "deviceID": "0123456789abcdef01234567", "connected": true, "last_handshake_at": "2015-07-17T22:28:40.907Z", "last_app": "" }*/ return new Result<Variable> { Success = true, Data = variable }; } else { return response.AsResult<Variable>(); } } catch(HttpRequestException re) { return new Result<Variable> { Success = false, Error = re.Message, Exception = re }; } }
/// <summary> /// Parses the variables. /// </summary> /// <param name="obj">The object.</param> protected virtual void ParseVariables(JObject obj) { if (obj == null) { throw new ArgumentNullException(nameof(obj)); } var list = new List<Variable>(); foreach (var prop in obj.Properties()) { var first = variables.FirstOrDefault(i => String.Compare(i.Name, prop.Name) == 0); if (first == null) { first = new Variable(this) { Name = prop.Name, Type = getVariableType(prop.Value) }; } else { first.Type = getVariableType(prop.Value); } list.Add(first); } ParticleCloud.SyncContext.InvokeIfRequired(() => { variables.Clear(); foreach (var item in list) { variables.Add(item); } }); }