private void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) { if (e.Error != null) { if (!TryNextURL((int)e.UserState)) { InvokeUpdateInfoCallbacksAndClear(null, null); } } else { AppInfo info = AppInfo.FromJson(e.Result); if (info == null) { if (!TryNextURL((int)e.UserState)) { InvokeUpdateInfoCallbacksAndClear(null, null); } return; } if (!LauncherSettings.AppID.Equals(info.appId)) { MessageBox.Show("Invalid update mirror: appID does not match local value!", "An error occured", MessageBoxButtons.OK, MessageBoxIcon.Error); if (!TryNextURL((int)e.UserState)) { InvokeUpdateInfoCallbacksAndClear(null, null); } return; } InvokeUpdateInfoCallbacksAndClear(info, UpdateHost.GetUpdateHosts()[(int)e.UserState]); } }
private bool TryNextURL(int currentIndex) { int nextIndex = (currentIndex) + 1; if (nextIndex < UpdateHost.GetUpdateHosts().Length) { client.DownloadStringAsync(UpdateHost.GetUpdateHosts()[nextIndex].AppInfoURL, nextIndex); return(true); } return(false); }
public void RetrieveAppInfo(Action <AppInfo, UpdateHost> callback) { client.DownloadStringCompleted += client_DownloadStringCompleted; appInfoCallbacks.Add(callback); client.DownloadStringAsync(UpdateHost.GetUpdateHosts()[0].AppInfoURL, 0); }