public async Task <JsonResult> SendData(bool isRobotFault, bool isCtrlFault)
        {
            try
            {
                using (var httpClient1 = new HttpClient())
                {
                    IronMQMessage   ironMQMessage = null;
                    IOTEventRequest eventRequest  = new IOTEventRequest();
                    eventRequest.robotID         = ConfigVars.Instance.RobotID;
                    eventRequest.robotEvent      = isRobotFault ? "Fault" : "Operating";
                    eventRequest.controllerEvent = isCtrlFault ? "Fault" : "Operating";
                    httpClient1.DefaultRequestHeaders.Accept.Clear();
                    httpClient1.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                    httpClient1.DefaultRequestHeaders.Add("Authorization", ConfigVars.Instance.IOTToken);
                    HttpRequestMessage request = new HttpRequestMessage
                    {
                        Content    = new StringContent(JsonConvert.SerializeObject(eventRequest), Encoding.UTF8, "application/json"),
                        Method     = HttpMethod.Post,
                        RequestUri = new Uri(ConfigVars.Instance.EnpointUrl)
                    };
                    var response = await httpClient1.SendAsync(request);

                    if (response.IsSuccessStatusCode)
                    {
                        using (var httpClient2 = new HttpClient())
                        {
                            dynamic jsonData = new ExpandoObject();
                            jsonData.n       = 1;
                            jsonData.timeout = 60000;
                            jsonData.wait    = 0;
                            jsonData.delete  = false;
                            request          = new HttpRequestMessage
                            {
                                Content    = new StringContent(JsonConvert.SerializeObject(jsonData), Encoding.UTF8, "application/json"),
                                Method     = HttpMethod.Post,
                                RequestUri = new Uri(string.Format("{0}/reservations?oauth={1}", ConfigVars.Instance.IronMQUrl, ConfigVars.Instance.IronMQToken))
                            };

                            //reserve message in iron message queue
                            response = await httpClient2.SendAsync(request);

                            if (response.IsSuccessStatusCode)
                            {
                                IList <IronMQMessage> messagesLst = null;
                                var ironMQResponse = await response.Content.ReadAsStringAsync();

                                var iron_MQMessage = JsonConvert.DeserializeObject <IDictionary <string, object> >(ironMQResponse);
                                if (iron_MQMessage.Count > 0 && iron_MQMessage.ContainsKey("messages"))
                                {
                                    messagesLst = JsonConvert.DeserializeObject <IList <IronMQMessage> >(iron_MQMessage["messages"].ToString());
                                }
                                if (messagesLst != null && messagesLst.Where(p => !string.IsNullOrEmpty(p.body)).Count() > 0)
                                {
                                    ironMQMessage = messagesLst.Where(p => !string.IsNullOrEmpty(p.body)).LastOrDefault();
                                    Parallel.Invoke(() =>
                                    {
                                        if (ironMQMessage != null)
                                        {
                                            //delete iron queue message after reading
                                            DeleteIronMessageByID(ironMQMessage.id, ironMQMessage.reservation_id);
                                        }
                                    });
                                }
                            }
                        }
                    }

                    if (ironMQMessage == null)
                    {
                        return(Json(null));
                    }
                    else
                    {
                        return(Json(ironMQMessage.body));
                    }
                }
            }
            catch (Exception ex)
            {
                return(Json(null));
            }
        }
        public async Task <JsonResult> SendData(int mileage)
        {
            try
            {
                using (var httpClient1 = new HttpClient())
                {
                    IronMQMessage   ironMQMessage = null;
                    IOTEventRequest eventRequest  = new IOTEventRequest();
                    eventRequest.VIN                 = ConfigVars.Instance.VIN;
                    eventRequest.mileage             = mileage;
                    eventRequest.errorCode           = "None";
                    eventRequest.lifetimeMpg         = 18;
                    eventRequest.lifetimeDrivingTime = 398;
                    eventRequest.lifetimeEcoTime     = 93;
                    eventRequest.trip                = new IOTTrip()
                    {
                        id = 644,
                        suspensionWeight = 432,
                        brakeEvents      = 93,
                        avgSpeed         = 36,
                        length           = 50,
                        duration         = 40,
                        mpg                     = 15,
                        ecoTime                 = 19,
                        passengerCount          = 2,
                        currentRange            = 234,
                        childLock               = 3,
                        gpsActive               = true,
                        climateControlTarget    = 68,
                        climateControlEnergyUse = 4,
                        internalTemp            = 71,
                        externalTemp            = 82,
                        oilLife                 = 43,
                        driverAlert             = "None",
                        serviceNeeded           = "None",
                        latitude                = 23,
                        longitude               = 23
                    };

                    httpClient1.DefaultRequestHeaders.Accept.Clear();
                    httpClient1.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                    httpClient1.DefaultRequestHeaders.Add("Authorization", ConfigVars.Instance.IOTToken);
                    HttpRequestMessage request = new HttpRequestMessage
                    {
                        Content    = new StringContent(JsonConvert.SerializeObject(eventRequest), Encoding.UTF8, "application/json"),
                        Method     = HttpMethod.Post,
                        RequestUri = new Uri(ConfigVars.Instance.EnpointUrl)
                    };
                    var response = await httpClient1.SendAsync(request);

                    if (response.IsSuccessStatusCode)
                    {
                        using (var httpClient2 = new HttpClient())
                        {
                            dynamic jsonData = new ExpandoObject();
                            jsonData.n       = 1;
                            jsonData.timeout = 60000;
                            jsonData.wait    = 0;
                            jsonData.delete  = false;
                            request          = new HttpRequestMessage
                            {
                                Content    = new StringContent(JsonConvert.SerializeObject(jsonData), Encoding.UTF8, "application/json"),
                                Method     = HttpMethod.Post,
                                RequestUri = new Uri(string.Format("{0}/reservations?oauth={1}", ConfigVars.Instance.IronMQUrl, ConfigVars.Instance.IronMQToken))
                            };

                            //reserve message in iron message queue
                            response = await httpClient2.SendAsync(request);

                            if (response.IsSuccessStatusCode)
                            {
                                IList <IronMQMessage> messagesLst = null;
                                var ironMQResponse = await response.Content.ReadAsStringAsync();

                                var iron_MQMessage = JsonConvert.DeserializeObject <IDictionary <string, object> >(ironMQResponse);
                                if (iron_MQMessage.Count > 0 && iron_MQMessage.ContainsKey("messages"))
                                {
                                    messagesLst = JsonConvert.DeserializeObject <IList <IronMQMessage> >(iron_MQMessage["messages"].ToString());
                                }
                                if (messagesLst != null && messagesLst.Where(p => !string.IsNullOrEmpty(p.body)).Count() > 0)
                                {
                                    ironMQMessage = messagesLst.Where(p => !string.IsNullOrEmpty(p.body)).LastOrDefault();
                                    Parallel.Invoke(() =>
                                    {
                                        if (ironMQMessage != null)
                                        {
                                            //delete iron queue message after reading
                                            DeleteIronMessageByID(ironMQMessage.id, ironMQMessage.reservation_id);
                                        }
                                    });
                                }
                            }
                        }
                    }

                    if (ironMQMessage == null)
                    {
                        return(Json(null));
                    }
                    else
                    {
                        return(Json(ironMQMessage.body));
                    }
                }
            }
            catch (Exception ex)
            {
                return(Json(null));
            }
        }