title: Retrieving data from REST Api in Unity without lag or jitter using C#
body: <p>Every 5 secs I am calling the REST using C# script. But the problem is the application lags every 10 secs(InvokeRepeating) and waits for server response and then gives out the result after the lag.</p>
  
  <p>How to overcome this problem ?? I need to access a specific row in realtime so that changes is retrieved without any lag.</p>
  
  <p>The Following code-snippet is used to read REST Api</p>
  
  <pre><code>using UnityEngine;
  using System.Collections;
  using System.Net;
  using System.IO;
  using System.Collections.Generic;
  using System.Linq;
  using System;
  using Newtonsoft.Json;
  using Newtonsoft.Json.Linq;
  
  
  public class Rows {
  
  public string description ;
  public float Efficiency;
  public bool IsConnected;
  public string Lastconnection;
  public float MTBF;
  public float MTTR;
  public string Name;
  public float Speed;
  public float TemperatureSetPoint;
  
  }
  
  public class GetData : MonoBehaviour 
  {
  
  string url="http:LocalHost/Data/Properties/";
  string username="Administrator";
  string password="admin";
  string rt;
  
  
  void Start () {
      JToken tok = CallWeb();
  }
  
  
  public JToken CallWeb()
  {
       {
          var httpRequest = (HttpWebRequest)WebRequest.Create (url);
          httpRequest.ContentType = "application/json";
  
          string encoded = System.Convert.ToBase64String (System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username+":"+password));
          httpRequest.Headers.Add ("Authorization","Basic "+encoded);
          httpRequest.Accept = "application/json";
  
          using (HttpWebResponse response = (HttpWebResponse)httpRequest.GetResponse())
          using (Stream stream = response.GetResponseStream())
          using (StreamReader reader = new StreamReader(stream))
          {
              rt = reader.ReadToEnd();
              JObject data = JObject.Parse(rt);
              JToken token = (data["rows"][0]);
              return token;
              }   
          }
      }
  }
  </code></pre>
  
  <p>From the below code I access the required row and use it in unity.</p>
  
  <pre><code>    using UnityEngine;
      using System.Collections;
      using Newtonsoft.Json.Linq;
      using UnityEngine.UI;
  
      public class GetPropertyValues : MonoBehaviour
      {
  
          GetData thing = new GetData ();
  
          public GameObject CountText;
          public GameObject TempText;
          static string CountValue1;
          static string CountValue2;
          static string TempValue1;
          static string TempValue2;
  
  
          void Start()
          {
              JToken token = thing.CallWeb ();
              foreach (JProperty prop in token) 
              {           
                  if (prop.Name == "ScrapCount") 
                  { 
                      CountValue1 = prop.Value.ToString ();
                      CountText.GetComponent&lt;TextMesh&gt; ().text = "Count= "+CountValue1.ToString() ;
                      Debug.Log ("This is the Count value" + prop.Value);
                      InvokeRepeating ("countDisplay", 5, 10);
                  }
                  if (prop.Name == "OvenTemperature") 
                  {
                      TempValue1 = prop.Value.ToString ();
                      TempText.GetComponent&lt;TextMesh&gt; ().text = TempValue1.ToString () + "'C";
                      Debug.Log ("This is the Temp value" + prop.Value);
                      InvokeRepeating ("tempDisplay", 5, 10);
  
                  }
              }
          }
  
          void countDisplay()
          {
              JToken token = thing.CallThingWorx ();
              foreach (JProperty prop in token) {
                  if (prop.Name == "ScrapCount") {
                      CountValue2 = prop.Value.ToString ();
                      if (CountValue1 == CountValue2) {
                          Debug.Log ("count value is still " + CountValue1);
                      }
                      else if (CountValue1 != CountValue2) {
                          CountText.GetComponent&lt;TextMesh&gt; ().text = "Count= " + CountValue2.ToString();
                          Debug.Log ("count value Changed" + CountValue2);
                      }
                  }
              }
          }
  
          void tempDisplay()
          {
              JToken token = thing.CallWeb ();
              foreach (JProperty prop in token) 
              {
                  if (prop.Name == "OvenTemperature") 
                  {
                      TempValue2 = prop.Value.ToString ();
                      if (TempValue1 == TempValue2) 
                      {
                          Debug.Log ("Temp value is still " + TempValue1);
                      }
                      else if (TempValue1 != TempValue2) 
                      {
                          TempText.GetComponent&lt;TextMesh&gt; ().text = TempValue2.ToString() +"'C";
                          Debug.Log ("Temp value Changed" + TempValue2);
                      }
                  }
              }
          }
      }
  </code></pre>