public string GetAvailableTrips2(int sourceId, int destinationId, String dateofjourney, Int16 resultSetIndex, String ConsumerKey, String ConsumerSecret)
        {
            try
            {
                ClientAPIList objClientAPIList = new ClientAPIList();
                BusesAvailabilityResponse objBusesAvailabilityResponse = new BusesAvailabilityResponse();
                if (resultSetIndex != 2)
                {
                    HttpContext.Current.Session["AvailResponse"] = null;
                    HttpRuntime.Cache["bus"] = "";

                    //Check if Cache already contains the Providers API List
                    //Else get it from database
                    GetAPIProvidersList(ConsumerKey, ConsumerSecret);
                    objClientAPIList = (ClientAPIList)HttpContext.Current.Cache["ClientAPI-" + ConsumerKey];
                    //Check if atleast one provider is accessible
                    if (objClientAPIList != null && objClientAPIList.Count > 0)
                    {
                        BusesSearchFilter objBusesSearchFilter = new BusesSearchFilter();
                        threadcount = Convert.ToInt32(objClientAPIList.Count());
                        thread = new Thread[threadcount];
                        for (i = 0; i < thread.Count(); i++)
                        {
                            thread[i] = new Thread(() =>
                            {
                                if (objClientAPIList[i].ProviderName == "TICKETGOOSE")
                                {
                                    int T = i;
                                    objBusesSearchFilter = GetCityIDsOfProviders(objBusesSearchFilter, objClientAPIList[T], sourceId, destinationId, dateofjourney);
                                    if (objBusesSearchFilter.SourceID > 0 && objBusesSearchFilter.DestinationID > 0)
                                    {
                                        TSID = Convert.ToInt32(objBusesSearchFilter.SourceID);
                                        TDID = Convert.ToInt32(objBusesSearchFilter.DestinationID);
                                        TDate = objBusesSearchFilter.JourneyDate;
                                        TURL = objClientAPIList[T].APIURL;
                                        TConsumerKey = objClientAPIList[T].ConsumerKey;
                                        TCOnsumerSecretKey = objClientAPIList[T].ConsumerSecret;
                                        TPID = objClientAPIList[T].ProviderID;
                                        Tbus = Ticketgoose(TURL, TConsumerKey, TCOnsumerSecretKey, TPID, TSID, TDID, TDate);
                                        if (Tbus != null)
                                        {
                                            if (Tbus.Count() > 0)
                                            {
                                                bus = trips(Tbus);
                                                HttpRuntime.Cache["bus"] = Tbus;
                                                objBusesAvailabilityResponse.providersCount = 10;
                                            }

                                        }
                                    }
                                }
                                else if (objClientAPIList[i].ProviderName == "MORNINGSTAR")
                                {
                                    int M = i;
                                    objBusesSearchFilter = GetCityIDsOfProviders(objBusesSearchFilter, objClientAPIList[M], sourceId, destinationId, dateofjourney);
                                    if (objBusesSearchFilter.SourceID > 0 && objBusesSearchFilter.DestinationID > 0)
                                    {
                                        MSID = Convert.ToInt32(objBusesSearchFilter.SourceID);
                                        MDID = Convert.ToInt32(objBusesSearchFilter.DestinationID);
                                        MDate = objBusesSearchFilter.JourneyDate;
                                        MURL = objClientAPIList[M].APIURL + "/";
                                        MConsumerKey = objClientAPIList[M].ConsumerKey;
                                        MCOnsumerSecretKey = objClientAPIList[M].ConsumerSecret;
                                        MPID = objClientAPIList[M].ProviderID;
                                        MProviderName = objClientAPIList[M].ProviderName;
                                        Tbus = MORNINGSTAR(MURL, MConsumerKey, MCOnsumerSecretKey, MPID, MProviderName, MSID, MDID, MDate);
                                        if (Tbus != null)
                                        {
                                            if (Tbus.Count() > 0)
                                            {
                                                bus = trips(Tbus);
                                            }

                                            // b = true;
                                        }
                                    }
                                }
                                else if (objClientAPIList[i].ProviderName == "BITLA")
                                {
                                    int B = i;
                                    bus = GETBITLROUTES(objBusesSearchFilter, objClientAPIList[B], sourceId, destinationId, dateofjourney);

                                }
                                else if (objClientAPIList[i].ProviderName == "KALLADA")
                                {
                                    int kD = i;
                                    objBusesSearchFilter = GetCityIDsOfProviders(objBusesSearchFilter, objClientAPIList[kD], sourceId, destinationId, dateofjourney);
                                    if (objBusesSearchFilter.SourceID > 0 && objBusesSearchFilter.DestinationID > 0)
                                    {
                                        KDSID = Convert.ToInt32(objBusesSearchFilter.SourceID);
                                        KDDID = Convert.ToInt32(objBusesSearchFilter.DestinationID);
                                        KDDate = objBusesSearchFilter.JourneyDate;
                                        KDURL = objClientAPIList[kD].APIURL;
                                        KDConsumerKey = objClientAPIList[kD].ConsumerKey;
                                        KDCOnsumerSecretKey = objClientAPIList[kD].ConsumerSecret;
                                        KDProviderName = objClientAPIList[kD].ProviderName;
                                        Kbus = KALLADA(KDURL, KDConsumerKey, KDCOnsumerSecretKey, KDProviderName, KDSID, KDDID, KDDate);
                                        if (Kbus != null)
                                        {
                                            if (Kbus.Count() > 0)
                                            {
                                                bus = trips(Kbus);
                                            }
                                        }
                                    }
                                }
                                else if (objClientAPIList[i].ProviderName == "SAIANJANA")
                                {
                                    int s = i;
                                    objBusesSearchFilter = GetCityIDsOfProviders(objBusesSearchFilter, objClientAPIList[s], sourceId, destinationId, dateofjourney);
                                    if (objBusesSearchFilter.SourceID > 0 && objBusesSearchFilter.DestinationID > 0)
                                    {
                                        SSID = Convert.ToInt32(objBusesSearchFilter.SourceID);
                                        SDID = Convert.ToInt32(objBusesSearchFilter.DestinationID);
                                        SDate = objBusesSearchFilter.JourneyDate;
                                        SURL = objClientAPIList[s].APIURL;
                                        SConsumerKey = objClientAPIList[s].ConsumerKey;
                                        SCOnsumerSecretKey = objClientAPIList[s].ConsumerSecret;
                                        SProviderName = objClientAPIList[s].ProviderName;
                                        Kbus = SAIANJANA(SURL, SConsumerKey, SCOnsumerSecretKey, SProviderName, SSID, SDID, SDate);
                                        if (Kbus != null)
                                        {
                                            if (Kbus.Count() > 0)
                                            {
                                                bus = trips(Kbus);

                                            }
                                        }
                                    }
                                }
                                else if (objClientAPIList[i].ProviderName == "SVR")
                                {
                                    int sv = i;
                                    objBusesSearchFilter = GetCityIDsOfProviders(objBusesSearchFilter, objClientAPIList[sv], sourceId, destinationId, dateofjourney);
                                    if (objBusesSearchFilter.SourceID > 0 && objBusesSearchFilter.DestinationID > 0)
                                    {
                                        SVSID = Convert.ToInt32(objBusesSearchFilter.SourceID);
                                        SVDID = Convert.ToInt32(objBusesSearchFilter.DestinationID);
                                        SVDate = objBusesSearchFilter.JourneyDate;
                                        SVURL = objClientAPIList[sv].APIURL;
                                        SVConsumerKey = objClientAPIList[sv].ConsumerKey;
                                        SVCOnsumerSecretKey = objClientAPIList[sv].ConsumerSecret;
                                        SVProviderName = objClientAPIList[sv].ProviderName;
                                        Kbus = GETSVR(SVURL, SVConsumerKey, SVCOnsumerSecretKey, SVProviderName, SVSID, SVDID, SVDate);
                                        if (Kbus != null)
                                        {
                                            if (Kbus.Count() > 0)
                                            {
                                                bus = trips(Kbus);
                                            }
                                        }
                                    }
                                }
                                else if (objClientAPIList[i].ProviderName == "RAJESH")
                                {
                                    int r = i;
                                    objBusesSearchFilter = GetCityIDsOfProviders(objBusesSearchFilter, objClientAPIList[r], sourceId, destinationId, dateofjourney);
                                    if (objBusesSearchFilter.SourceID > 0 && objBusesSearchFilter.DestinationID > 0)
                                    {
                                        RSID = Convert.ToInt32(objBusesSearchFilter.SourceID);
                                        RDID = Convert.ToInt32(objBusesSearchFilter.DestinationID);
                                        RDate = objBusesSearchFilter.JourneyDate;
                                        RURL = objClientAPIList[r].APIURL;
                                        RConsumerKey = objClientAPIList[r].ConsumerKey;
                                        RCOnsumerSecretKey = objClientAPIList[r].ConsumerSecret;
                                        RProviderName = objClientAPIList[r].ProviderName;
                                        Kbus = Rajesh(RURL, RConsumerKey, RCOnsumerSecretKey, RProviderName, RSID, RDID, RDate);
                                        if (Kbus != null)
                                        {
                                            if (Kbus.Count() > 0)
                                            {
                                                bus = trips(Kbus);
                                                //HttpRuntime.Cache["bus"] = Tbus;
                                            }

                                        }
                                    }
                                }
                                else if (objClientAPIList[i].ProviderName == "KAVERI")
                                {
                                    int k = i;
                                    objBusesSearchFilter = GetCityIDsOfProviders(objBusesSearchFilter, objClientAPIList[k], sourceId, destinationId, dateofjourney);
                                    if (objBusesSearchFilter.SourceID > 0 && objBusesSearchFilter.DestinationID > 0)
                                    {
                                        KSID = Convert.ToInt32(objBusesSearchFilter.SourceID);
                                        KDID = Convert.ToInt32(objBusesSearchFilter.DestinationID);
                                        KDate = objBusesSearchFilter.JourneyDate;
                                        KURL = objClientAPIList[i].APIURL;
                                        KConsumerKey = objClientAPIList[k].ConsumerKey;
                                        KCOnsumerSecretKey = objClientAPIList[k].ConsumerSecret;
                                        KProviderName = objClientAPIList[k].ProviderName;
                                        Kbus = KAVERI(KURL, KConsumerKey, KCOnsumerSecretKey, KProviderName, KSID, KDID, KDate);
                                        if (Kbus != null)
                                        {
                                            if (Kbus.Count() > 0)
                                            {
                                                bus = trips(Kbus);
                                                //HttpRuntime.Cache["Kbus"] = Kbus;

                                            }

                                        }
                                    }
                                }
                            });
                            // threat initialisation ends

                            if (c == true)
                            {
                                thread[i].Start();
                                thread[i].Join(500);
                                if (i == thread.Count() - 1)
                                {
                                    i = thread.Count() - 1;
                                    break;
                                }
                            }

                        }
                    }
                }

                if (resultSetIndex != 2)
                {

                Found:
                    int j = 0;
                    foreach (var thd in thread)
                    {
                        if (thd.IsAlive)
                        {
                            thd.Join(1000);
                            b = false;
                        }
                        else
                        {
                            j++;
                        }
                        if (j == threadcount)
                        {
                            b = true;
                            i = 0;
                            break;
                        }

                    }

                    if (c == true)
                    {
                        c = false;
                    }
                    if (b == false)
                    {
                        goto Found;
                    }
                    else
                    {
                        b = false;
                        //check if resultset index exceeds accessible providers list call the requested api
                        if (resultSetIndex > 0 && resultSetIndex <= objClientAPIList.Count)
                        {
                            try
                            {
                                // objBusesAvailabilityResponse.availableTrips = GetAvailableTripsByProviderName(objClientAPIList[i], objBusesSearchFilter);
                                objBusesAvailabilityResponse.responseStatus = HttpStatusCode.OK;

                            }
                            catch (Exception ex)
                            {
                                //return the exception
                                objBusesAvailabilityResponse.availableTrips = null;
                                objBusesAvailabilityResponse.responseStatus = HttpStatusCode.BadRequest;
                                objBusesAvailabilityResponse.message = ex.Message;
                            }
                            if (objBusesAvailabilityResponse.providersCount == 10)
                            {
                                objBusesAvailabilityResponse.providersCount = 0;
                            }
                            else
                            {
                                objBusesAvailabilityResponse.providersCount = objClientAPIList.Count - resultSetIndex;
                            }
                        }
                        else
                        {
                            objBusesAvailabilityResponse.providersCount = 0;
                            objBusesAvailabilityResponse.responseStatus = HttpStatusCode.BadRequest;
                        }
                    }
                }
                if (HttpContext.Current.Session["AvailResponse"] == null)
                {
                    objBusesAvailabilityResponse.availableTrips = bus;
                    HttpContext.Current.Session["AvailResponse"] = objBusesAvailabilityResponse;
                    HttpRuntime.Cache["bus"] = "";
                }
                else
                {
                bump:
                    if (HttpRuntime.Cache["bus"].ToString() != "")
                    {
                        Tbus = (AvailableTrips)HttpRuntime.Cache["bus"];

                        if (Tbus.Count() > 0)
                        {
                            BusesAvailabilityResponse busback = new BusesAvailabilityResponse();
                            Tbus = (AvailableTrips)HttpRuntime.Cache["bus"];
                            busback = (BusesAvailabilityResponse)HttpContext.Current.Session["AvailResponse"];
                            bus = trips((AvailableTrips)busback.availableTrips);
                            bus = trips(Tbus);
                            busback.availableTrips = bus;
                            busback.responseStatus = HttpStatusCode.OK;
                            busback.providersCount = 0;
                            HttpContext.Current.Session["AvailResponse"] = busback;
                            objBusesAvailabilityResponse.availableTrips = Tbus;
                            objBusesAvailabilityResponse.responseStatus = HttpStatusCode.OK;
                            objBusesAvailabilityResponse.providersCount = 0;
                            HttpRuntime.Cache["bus"] = "";

                        }

                    }
                    else
                    {
                        objClientAPIList = (ClientAPIList)HttpContext.Current.Cache["ClientAPI-" + ConsumerKey];
                        if (objClientAPIList[1].ProviderName == "TICKETGOOSE")
                        {
                            goto bump;
                        }
                        else
                        {

                        }
                    }

                }
                return JsonConvert.SerializeObject(objBusesAvailabilityResponse);
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }
        public string GetAvailableTrips(int sourceId, int destinationId, String dateofjourney, Int16 resultSetIndex, String ConsumerKey, String ConsumerSecret)
        {
            try
            {
                ClientAPIList objClientAPIList = new ClientAPIList();
                BusesAvailabilityResponse objBusesAvailabilityResponse = new BusesAvailabilityResponse();
                if (resultSetIndex != 2)
                {
                    HttpContext.Current.Session["AvailResponse"] = null;
                    HttpRuntime.Cache["bus"] = "";

                    //Check if Cache already contains the Providers API List
                    //Else get it from database
                    GetAPIProvidersList(ConsumerKey, ConsumerSecret);
                    objClientAPIList = (ClientAPIList)HttpContext.Current.Cache["ClientAPI-" + ConsumerKey];
                    //Check if atleast one provider is accessible
                    if (objClientAPIList != null && objClientAPIList.Count > 0)
                    {
                        BusesSearchFilter objBusesSearchFilter = new BusesSearchFilter();
                        threadcount = Convert.ToInt32(objClientAPIList.Count());
                        thread = new Thread[threadcount];
                        for (i = 0; i < thread.Count(); i++)
                        {
                            thread[i] = new Thread(() =>
                            {
                                if (objClientAPIList[i].ProviderName == "TICKETGOOSE")
                                {
                                    int T = i;
                                    objBusesSearchFilter = GetCityIDsOfProviders(objBusesSearchFilter, objClientAPIList[T], sourceId, destinationId, dateofjourney);
                                    if (Tsource_ids.ToString() != "" && TDestination_Ids.ToString() != "")
                                    {
                                        string[] Tsu = Tsource_ids.Split(',');
                                        string[] Tdu = TDestination_Ids.Split(',');
                                        string[] TSdr = Tsu.Distinct().ToArray();
                                        string[] TDdr = Tdu.Distinct().ToArray();
                                        foreach (string Tsr in TSdr)
                                        {
                                            foreach (string Tdr in TDdr)
                                            {
                                                TSID = Convert.ToInt32(Tsr);
                                                TDID = Convert.ToInt32(Tdr);
                                                TDate = objBusesSearchFilter.JourneyDate;
                                                TURL = objClientAPIList[T].APIURL;
                                                TConsumerKey = objClientAPIList[T].ConsumerKey;
                                                TCOnsumerSecretKey = objClientAPIList[T].ConsumerSecret;
                                                TPID = objClientAPIList[T].ProviderID;
                                                Tbus = Ticketgoose(TURL, TConsumerKey, TCOnsumerSecretKey, TPID, TSID, TDID, TDate);
                                                if (Tbus != null)
                                                {
                                                    if (Tbus.Count() > 0)
                                                    {
                                                        bus = trips(Tbus);
                                                        HttpRuntime.Cache["bus"] = Tbus;
                                                        objBusesAvailabilityResponse.providersCount = 10;
                                                    }

                                                }

                                            }
                                        }
                                    }
                                }
                                else if (objClientAPIList[i].ProviderName == "MORNINGSTAR")
                                {
                                    int M = i;
                                    objBusesSearchFilter = GetCityIDsOfProviders(objBusesSearchFilter, objClientAPIList[M], sourceId, destinationId, dateofjourney);
                                    if (Msource_ids.ToString() != "" && MDestination_Ids.ToString() != "")
                                    {
                                        string[] Msu = Msource_ids.Split(',');
                                        string[] Mdu = MDestination_Ids.Split(',');
                                        string[] MSdr = Msu.Distinct().ToArray();
                                        string[] MDdr = Mdu.Distinct().ToArray();
                                        foreach (string Msr in MSdr)
                                        {
                                            foreach (string Mdr in MDdr)
                                            {
                                                MSID = Convert.ToInt32(Msr);
                                                MDID = Convert.ToInt32(Mdr);
                                                MDate = objBusesSearchFilter.JourneyDate;
                                                MURL = objClientAPIList[M].APIURL + "/";
                                                MConsumerKey = objClientAPIList[M].ConsumerKey;
                                                MCOnsumerSecretKey = objClientAPIList[M].ConsumerSecret;
                                                MPID = objClientAPIList[M].ProviderID;
                                                MProviderName = objClientAPIList[M].ProviderName;
                                                Tbus = MORNINGSTAR(MURL, MConsumerKey, MCOnsumerSecretKey, MPID, MProviderName, MSID, MDID, MDate);
                                                if (Tbus != null)
                                                {
                                                    if (Tbus.Count() > 0)
                                                    {
                                                        bus = trips(Tbus);
                                                    }
                                                }

                                            }
                                        }
                                    }
                                }
                                else if (objClientAPIList[i].ProviderName == "BITLA")
                                {
                                    //objBusesSearchFilter.SourceID = Sdr.ToString() == "" ? 0 : int.Parse(Sdr.ToString());
                                    //objBusesSearchFilter.DestinationID = Ddr.ToString() == "" ? 0 : Convert.ToInt32(Ddr.ToString());
                                    //objBusesSearchFilter.JourneyDate = dateofjourney;
                                    int B = i;
                                    objBusesSearchFilter = GetCityIDsOfProviders(objBusesSearchFilter, objClientAPIList[B], sourceId, destinationId, dateofjourney);
                                    if (source_ids.ToString() != "" && Destination_Ids.ToString() != "")
                                    {
                                        string[] su = source_ids.Split(',');
                                        string[] du = Destination_Ids.Split(',');
                                        string[] SSdr = su.Distinct().ToArray();
                                        string[] DDdr = du.Distinct().ToArray();
                                        foreach (string Sdr in SSdr)
                                        {
                                            foreach (string Ddr in DDdr)
                                            {
                                                BSID = Convert.ToInt32(Sdr);
                                                BDID = Convert.ToInt32(Ddr);
                                                BDate = objBusesSearchFilter.JourneyDate;
                                                BURL = objClientAPIList[B].APIURL + "/";
                                                BConsumerKey = objClientAPIList[B].ConsumerKey;
                                                BCOnsumerSecretKey = objClientAPIList[B].ConsumerSecret;
                                                BPID = objClientAPIList[B].ProviderID;
                                                BProviderName = objClientAPIList[B].ProviderName;
                                                Tbus = BITLA(BURL, BConsumerKey, BCOnsumerSecretKey, BPID, BProviderName, BSID, BDID, BDate);
                                                if (Tbus != null)
                                                {
                                                    if (Tbus.Count() > 0)
                                                    {
                                                        bus = trips(Tbus);
                                                    }
                                                }

                                            }
                                        }
                                    }

                                }
                                else if (objClientAPIList[i].ProviderName == "KALLADA")
                                {
                                    int kD = i;
                                    objBusesSearchFilter = GetCityIDsOfProviders(objBusesSearchFilter, objClientAPIList[kD], sourceId, destinationId, dateofjourney);
                                    if (KDsource_ids.ToString() != "" && KDDestination_Ids.ToString() != "")
                                    {
                                        string[] KDsu = KDsource_ids.Split(',');
                                        string[] KDdu = KDDestination_Ids.Split(',');
                                        string[] KSdr = KDsu.Distinct().ToArray();
                                        string[] KDdr = KDdu.Distinct().ToArray();
                                        foreach (string Ksr in KSdr)
                                        {
                                            foreach (string Kdr in KDdr)
                                            {

                                                KDSID = Convert.ToInt32(Ksr);
                                                KDDID = Convert.ToInt32(Kdr);
                                                KDDate = objBusesSearchFilter.JourneyDate;
                                                KDURL = objClientAPIList[kD].APIURL;
                                                KDConsumerKey = objClientAPIList[kD].ConsumerKey;
                                                KDCOnsumerSecretKey = objClientAPIList[kD].ConsumerSecret;
                                                KDProviderName = objClientAPIList[kD].ProviderName;
                                                Kbus = KALLADA(KDURL, KDConsumerKey, KDCOnsumerSecretKey, KDProviderName, KDSID, KDDID, KDDate);
                                                if (Kbus != null)
                                                {
                                                    if (Kbus.Count() > 0)
                                                    {
                                                        bus = trips(Kbus);
                                                    }
                                                }

                                            }
                                        }
                                    }
                                }
                                else if (objClientAPIList[i].ProviderName == "SAIANJANA")
                                {
                                    int s = i;
                                    objBusesSearchFilter = GetCityIDsOfProviders(objBusesSearchFilter, objClientAPIList[s], sourceId, destinationId, dateofjourney);
                                    if (SSsource_ids.ToString() != "" && SSDestination_Ids.ToString() != "")
                                    {
                                        string[] SSsu = SSsource_ids.Split(',');
                                        string[] SSdu = SSDestination_Ids.Split(',');
                                        string[] SSdr = SSsu.Distinct().ToArray();
                                        string[] SDdr = SSdu.Distinct().ToArray();
                                        foreach (string Ssr in SSdr)
                                        {
                                            foreach (string Sdr in SDdr)
                                            {
                                                SSID = Convert.ToInt32(Ssr);
                                                SDID = Convert.ToInt32(Sdr);
                                                SDate = objBusesSearchFilter.JourneyDate;
                                                SURL = objClientAPIList[s].APIURL;
                                                SConsumerKey = objClientAPIList[s].ConsumerKey;
                                                SCOnsumerSecretKey = objClientAPIList[s].ConsumerSecret;
                                                SProviderName = objClientAPIList[s].ProviderName;
                                                Kbus = SAIANJANA(SURL, SConsumerKey, SCOnsumerSecretKey, SProviderName, SSID, SDID, SDate);
                                                if (Kbus != null)
                                                {
                                                    if (Kbus.Count() > 0)
                                                    {
                                                        bus = trips(Kbus);

                                                    }
                                                }

                                            }
                                        }
                                    }
                                }
                                else if (objClientAPIList[i].ProviderName == "SVR")
                                {
                                    int sv = i;
                                    objBusesSearchFilter = GetCityIDsOfProviders(objBusesSearchFilter, objClientAPIList[sv], sourceId, destinationId, dateofjourney);
                                    if (Ssource_ids.ToString() != "" && SDestination_Ids.ToString() != "")
                                    {
                                        string[] sssu = Ssource_ids.Split(',');
                                        string[] ssdu = SDestination_Ids.Split(',');
                                        string[] SSSdr = sssu.Distinct().ToArray();
                                        string[] SSDdr = ssdu.Distinct().ToArray();
                                        foreach (string SSsr in SSSdr)
                                        {
                                            foreach (string SSdr in SSDdr)
                                            {

                                                SVSID = Convert.ToInt32(SSsr);
                                                SVDID = Convert.ToInt32(SSdr);
                                                SVDate = objBusesSearchFilter.JourneyDate;
                                                SVURL = objClientAPIList[sv].APIURL;
                                                SVConsumerKey = objClientAPIList[sv].ConsumerKey;
                                                SVCOnsumerSecretKey = objClientAPIList[sv].ConsumerSecret;
                                                SVProviderName = objClientAPIList[sv].ProviderName;
                                                Kbus = GETSVR(SVURL, SVConsumerKey, SVCOnsumerSecretKey, SVProviderName, SVSID, SVDID, SVDate);
                                                if (Kbus != null)
                                                {
                                                    if (Kbus.Count() > 0)
                                                    {
                                                        bus = trips(Kbus);
                                                    }
                                                }

                                            }
                                        }
                                    }
                                }
                                else if (objClientAPIList[i].ProviderName == "RAJESH")
                                {
                                    int r = i;
                                    objBusesSearchFilter = GetCityIDsOfProviders(objBusesSearchFilter, objClientAPIList[r], sourceId, destinationId, dateofjourney);
                                    if (Rsource_ids.ToString() != "" && RDestination_Ids.ToString() != "")
                                    {
                                        string[] Rsu = Rsource_ids.Split(',');
                                        string[] Rdu = RDestination_Ids.Split(',');
                                        string[] RSdr = Rsu.Distinct().ToArray();
                                        string[] RDdr = Rdu.Distinct().ToArray();
                                        foreach (string Rsr in RSdr)
                                        {
                                            foreach (string Rdr in RDdr)
                                            {
                                                RSID = Convert.ToInt32(Rsr);
                                                RDID = Convert.ToInt32(Rdr);
                                                RDate = objBusesSearchFilter.JourneyDate;
                                                RURL = objClientAPIList[r].APIURL;
                                                RConsumerKey = objClientAPIList[r].ConsumerKey;
                                                RCOnsumerSecretKey = objClientAPIList[r].ConsumerSecret;
                                                RProviderName = objClientAPIList[r].ProviderName;
                                                Kbus = Rajesh(RURL, RConsumerKey, RCOnsumerSecretKey, RProviderName, RSID, RDID, RDate);
                                                if (Kbus != null)
                                                {
                                                    if (Kbus.Count() > 0)
                                                    {
                                                        bus = trips(Kbus);
                                                        //HttpRuntime.Cache["bus"] = Tbus;
                                                    }

                                                }

                                            }
                                        }
                                    }
                                }
                                else if (objClientAPIList[i].ProviderName == "KAVERI")
                                {
                                    int k = i;
                                    objBusesSearchFilter = GetCityIDsOfProviders(objBusesSearchFilter, objClientAPIList[k], sourceId, destinationId, dateofjourney);
                                    if (Ksource_ids.ToString() != "" && KDestination_Ids.ToString() != "")
                                    {
                                        string[] Ksu = Ksource_ids.Split(',');
                                        string[] Kdu = KDestination_Ids.Split(',');
                                        string[] KSdr = Ksu.Distinct().ToArray();
                                        string[] KDdr = Kdu.Distinct().ToArray();
                                        foreach (string Ksr in KSdr)
                                        {
                                            foreach (string Kdr in KDdr)
                                            {
                                                KSID = Convert.ToInt32(Ksr);
                                                KDID = Convert.ToInt32(Kdr);
                                                KDate = objBusesSearchFilter.JourneyDate;
                                                KURL = objClientAPIList[i].APIURL;
                                                KConsumerKey = objClientAPIList[k].ConsumerKey;
                                                KCOnsumerSecretKey = objClientAPIList[k].ConsumerSecret;
                                                KProviderName = objClientAPIList[k].ProviderName;
                                                Kbus = KAVERI(KURL, KConsumerKey, KCOnsumerSecretKey, KProviderName, KSID, KDID, KDate);
                                                if (Kbus != null)
                                                {
                                                    if (Kbus.Count() > 0)
                                                    {
                                                        bus = trips(Kbus);
                                                        //HttpRuntime.Cache["Kbus"] = Kbus;

                                                    }

                                                }

                                            }
                                        }
                                    }
                                }
                                //easy bus 17-05-2013
                                else if (objClientAPIList[i].ProviderName == "EASYBUS")
                                {
                                    int E = i;
                                    objBusesSearchFilter = GetCityIDsOfProviders(objBusesSearchFilter, objClientAPIList[E], sourceId, destinationId, dateofjourney);
                                    if (Esource_ids.ToString() != "" && EDestination_Ids.ToString() != "")
                                    {
                                        string[] Esu = Esource_ids.Split(',');
                                        string[] Edu = EDestination_Ids.Split(',');
                                        string[] ESdr = Esu.Distinct().ToArray();
                                        string[] EDdr = Edu.Distinct().ToArray();
                                        foreach (string Esr in ESdr)
                                        {
                                            foreach (string Edr in EDdr)
                                            {

                                                ESID = Convert.ToInt32(Esr);
                                                EDID = Convert.ToInt32(Edr);
                                                EDate = dateofjourney;
                                                EURL = objClientAPIList[E].APIURL;
                                                EConsumerKey = objClientAPIList[E].ConsumerKey;
                                                ECOnsumerSecretKey = objClientAPIList[E].ConsumerSecret;
                                                EProviderName = objClientAPIList[E].ProviderName;
                                                Kbus = EASY(EURL, EConsumerKey, ECOnsumerSecretKey, EProviderName, ESID, EDID, EDate);
                                                if (Kbus != null)
                                                {
                                                    if (Kbus.Count() > 0)
                                                    {
                                                        bus = trips(Kbus);
                                                    }
                                                }

                                            }
                                        }
                                    }

                                }
                            });
                            // threat initialisation ends

                            if (c == true)
                            {
                                thread[i].Start();
                                thread[i].Join(500);
                                if (i == thread.Count() - 1)
                                {
                                    i = thread.Count() - 1;
                                    break;
                                }
                            }

                        }
                    }
                }

                if (resultSetIndex != 2)
                {

                Found:
                    int j = 0;
                    foreach (var thd in thread)
                    {
                        if (thd.IsAlive)
                        {
                            thd.Join(1000);
                            b = false;
                        }
                        else
                        {
                            j++;
                        }
                        if (j == threadcount)
                        {
                            b = true;
                            i = 0;
                            break;
                        }

                    }

                    if (c == true)
                    {
                        c = false;
                    }
                    if (b == false)
                    {
                        goto Found;
                    }
                    else
                    {
                        b = false;
                        //check if resultset index exceeds accessible providers list call the requested api
                        if (resultSetIndex > 0 && resultSetIndex <= objClientAPIList.Count)
                        {
                            try
                            {
                                // objBusesAvailabilityResponse.availableTrips = GetAvailableTripsByProviderName(objClientAPIList[i], objBusesSearchFilter);
                                objBusesAvailabilityResponse.responseStatus = HttpStatusCode.OK;

                            }
                            catch (Exception ex)
                            {
                                //return the exception
                                objBusesAvailabilityResponse.availableTrips = null;
                                objBusesAvailabilityResponse.responseStatus = HttpStatusCode.BadRequest;
                                objBusesAvailabilityResponse.message = ex.Message;
                            }
                            if (objBusesAvailabilityResponse.providersCount == 10)
                            {
                                objBusesAvailabilityResponse.providersCount = 0;
                            }
                            else
                            {
                                objBusesAvailabilityResponse.providersCount = 0;
                                //  objBusesAvailabilityResponse.providersCount = objClientAPIList.Count - resultSetIndex;
                            }
                        }
                        else
                        {
                            objBusesAvailabilityResponse.providersCount = 0;
                            objBusesAvailabilityResponse.responseStatus = HttpStatusCode.BadRequest;
                        }
                    }
                }
                if (HttpContext.Current.Session["AvailResponse"] == null)
                {
                    objBusesAvailabilityResponse.availableTrips = bus;
                    HttpContext.Current.Session["AvailResponse"] = objBusesAvailabilityResponse;
                    HttpRuntime.Cache["bus"] = "";
                }
                else
                {
                bump:
                    if (HttpRuntime.Cache["bus"].ToString() != "")
                    {
                        Tbus = (AvailableTrips)HttpRuntime.Cache["bus"];

                        if (Tbus.Count() > 0)
                        {
                            BusesAvailabilityResponse busback = new BusesAvailabilityResponse();
                            Tbus = (AvailableTrips)HttpRuntime.Cache["bus"];
                            busback = (BusesAvailabilityResponse)HttpContext.Current.Session["AvailResponse"];
                            bus = trips((AvailableTrips)busback.availableTrips);
                            bus = trips(Tbus);
                            busback.availableTrips = bus;
                            busback.responseStatus = HttpStatusCode.OK;
                            busback.providersCount = 0;
                            HttpContext.Current.Session["AvailResponse"] = busback;
                            objBusesAvailabilityResponse.availableTrips = Tbus;
                            objBusesAvailabilityResponse.responseStatus = HttpStatusCode.OK;
                            objBusesAvailabilityResponse.providersCount = 0;
                            HttpRuntime.Cache["bus"] = "";

                        }

                    }
                    else
                    {
                        objClientAPIList = (ClientAPIList)HttpContext.Current.Cache["ClientAPI-" + ConsumerKey];
                        if (objClientAPIList[1].ProviderName == "TICKETGOOSE")
                        {
                            goto bump;
                        }
                        else
                        {

                        }
                    }

                }
                return JsonConvert.SerializeObject(objBusesAvailabilityResponse);
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }