private static bool RetrieveJSON(string JSONUrl, string Function) { Log.Checking("JSON LIST: Retriving " + JSONUrl); try { Uri URLCall = new Uri(JSONUrl); ServicePointManager.FindServicePoint(URLCall).ConnectionLeaseTimeout = (int)TimeSpan.FromMinutes(1).TotalMilliseconds; var Client = new WebClient { Encoding = Encoding.UTF8 }; if (!WebCalls.Alternative()) { Client = new WebClientWithTimeout { Encoding = Encoding.UTF8 }; } else { Client.Headers.Add("user-agent", "SBRW Launcher " + Application.ProductVersion + " (+https://github.com/SoapBoxRaceWorld/GameLauncher_NFSW)"); } try { OnlineListJson = Client.DownloadString(URLCall); if (URLCall.OriginalString.Contains(URLs.Main)) { UnitedSC = APIStatus.Online; } else if (URLCall.OriginalString.Contains(URLs.Static)) { CarbonSC = APIStatus.Online; } else if (URLCall.OriginalString.Contains(URLs.Static_Alt)) { CarbonTwoSC = APIStatus.Online; } Log.UrlCall("JSON LIST: Retrieved " + JSONUrl); } catch (WebException Error) { APIStatus API_Status = APIChecker.StatusCodes(JSONUrl, Error, (HttpWebResponse)Error.Response); if (URLCall.OriginalString.Contains(URLs.Main)) { UnitedSC = API_Status; } else if (URLCall.OriginalString.Contains(URLs.Static)) { CarbonSC = API_Status; } else if (URLCall.OriginalString.Contains(URLs.Static_Alt)) { CarbonTwoSC = API_Status; } return(false); } catch (Exception Error) { LogToFileAddons.OpenLog("JSON LIST", null, Error, null, true); if (URLCall.OriginalString.Contains(URLs.Main)) { UnitedSC = APIStatus.Unknown; } else if (URLCall.OriginalString.Contains(URLs.Static)) { CarbonSC = APIStatus.Unknown; } else if (URLCall.OriginalString.Contains(URLs.Static_Alt)) { CarbonTwoSC = APIStatus.Unknown; } return(false); } finally { if (Client != null) { Client.Dispose(); } } if (IsJSONValid.ValidJson(OnlineListJson)) { switch (Function) { case "SL": ServerListUpdater.CachedJSONList = OnlineListJson; break; case "CDNL": CDNListUpdater.CachedJSONList = OnlineListJson; break; default: break; } Log.Completed("JSON LIST: Valid " + JSONUrl); return(true); } else { Log.Completed("JSON LIST: Invalid " + JSONUrl); return(false); } } catch { return(false); } finally { if (OnlineListJson != null) { OnlineListJson = null; } } }
public static void PingAPIStatus() { Log.Checking("API: Checking Status"); Log.Checking("API Status: WorldUnited"); switch (UnitedSC = APIChecker.CheckStatus(URLs.Main + "/serverlist.json", 15)) { case APIStatus.Online: UnitedSL = RetrieveJSON(URLs.Main + "/serverlist.json", "SL"); if (UnitedSL) { UnitedCDNL = RetrieveJSON(URLs.Main + "/cdn_list.json", "CDNL"); } Log.Completed("API Status: WorldUnited"); break; default: Log.Completed("API Status: WorldUnited"); break; } if (!UnitedAPI()) { Log.Checking("API Status: DavidCarbon"); switch (CarbonSC = APIChecker.CheckStatus(URLs.Static + "/serverlist.json", 15)) { case APIStatus.Online: if (!UnitedSL) { CarbonSL = RetrieveJSON(URLs.Static + "/serverlist.json", "SL"); } else { CarbonSL = true; } if (!UnitedCDNL) { CarbonCDNL = RetrieveJSON(URLs.Static + "/cdn_list.json", "CDNL"); } else { CarbonCDNL = true; } Log.Completed("API Status: DavidCarbon"); break; default: Log.Completed("API Status: DavidCarbon"); break; } } else { CarbonSL = true; CarbonCDNL = true; } if (!CarbonAPI()) { Log.Checking("API Status: DavidCarbon [Second]"); switch (CarbonTwoSC = APIChecker.CheckStatus(URLs.Static_Alt + "/serverlist.json", 15)) { case APIStatus.Online: if (!CarbonSL) { CarbonTwoSL = RetrieveJSON(URLs.Static_Alt + "/serverlist.json", "SL"); } else { CarbonTwoSL = true; } if (!CarbonCDNL) { CarbonTwoCDNL = RetrieveJSON(URLs.Static_Alt + "/cdn_list.json", "CDNL"); } else { CarbonTwoCDNL = true; } Log.Completed("API Status: DavidCarbon [Second]"); break; default: Log.Completed("API Status: DavidCarbon [Second]"); break; } } else { CarbonTwoSL = true; CarbonTwoCDNL = true; } Log.Checking("API: Test #2"); /* Check If Launcher Failed to Connect to any APIs */ if (!CarbonAPITwo()) { DiscordLauncherPresence.Status("Start Up", "Launcher Encountered API Errors"); if (MessageBox.Show(null, Translations.Database("VisualsAPIChecker_TextBox_No_API"), Translations.Database("VisualsAPIChecker_TextBox_No_API_P2"), MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) { FunctionStatus.LauncherForceClose = true; } else { Log.Warning("PRE-CHECK: User has Bypassed 'No Internet Connection' Check and will Continue"); MessageBox.Show(Translations.Database("VisualsAPIChecker_TextBox_No_API_P3"), Translations.Database("VisualsAPIChecker_TextBox_No_API_P4")); } } Log.Completed("API: Test #2 Done"); if (FunctionStatus.LauncherForceClose) { FunctionStatus.ErrorCloseLauncher("Closing From API Check Error", false); } else { FunctionStatus.IsVisualAPIsChecked = true; Log.Info("LIST CORE: Moved to Function"); /* (Start Process) Check ServerList Status */ ServerListUpdater.GetList(); } }