コード例 #1
0
ファイル: ParticleDevice.cs プロジェクト: cosoria/ParticleSDK
		/// <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);
		}
コード例 #2
0
ファイル: ParticleDevice.cs プロジェクト: cosoria/ParticleSDK
		/// <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
				};
			}
		}
コード例 #3
0
ファイル: ParticleDevice.cs プロジェクト: cosoria/ParticleSDK
		/// <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);
				}
			});
		}