mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-17 03:25:14 -04:00
Redo update task in launcher to reuse AsyncDownloader, instead of spinning up own async thread
This commit is contained in:
parent
2245cc6178
commit
877b84aee3
@ -31,7 +31,8 @@ namespace ClassicalSharp.Network {
|
||||
|
||||
public Request CurrentItem;
|
||||
public int CurrentItemProgress = -3;
|
||||
public IDrawer2D Drawer;
|
||||
public IDrawer2D Drawer;
|
||||
public CookieContainer Cookies;
|
||||
public AsyncDownloader(IDrawer2D drawer) { this.drawer = drawer; }
|
||||
|
||||
#if !LAUNCHER
|
||||
@ -283,6 +284,7 @@ namespace ClassicalSharp.Network {
|
||||
req.Timeout = 90 * 1000;
|
||||
req.Proxy = null;
|
||||
req.UserAgent = Program.AppName;
|
||||
req.CookieContainer = Cookies;
|
||||
|
||||
if (request.LastModified != DateTime.MinValue)
|
||||
req.IfModifiedSince = request.LastModified;
|
||||
|
@ -11,7 +11,7 @@ namespace Launcher.Gui.Screens {
|
||||
|
||||
public override void Tick() {
|
||||
base.Tick();
|
||||
if (game.checkTask != null && game.checkTask.Done && !updateDone) {
|
||||
if (game.checkTask != null && game.checkTask.Completed && !updateDone) {
|
||||
bool success = game.checkTask.Success;
|
||||
if (success) SuccessfulUpdateCheck(game.checkTask);
|
||||
else FailedUpdateCheck(game.checkTask);
|
||||
|
@ -74,10 +74,6 @@ namespace Launcher.Gui.Screens {
|
||||
}
|
||||
|
||||
void DownloadResources(int mouseX, int mouseY) {
|
||||
if (game.Downloader == null) {
|
||||
game.Downloader = new AsyncDownloader(drawer);
|
||||
game.Downloader.Init("");
|
||||
}
|
||||
if (fetcher != null) return;
|
||||
|
||||
fetcher = game.fetcher;
|
||||
|
@ -30,20 +30,22 @@ namespace Launcher.Gui.Screens {
|
||||
widgets[view.backIndex].OnClick = SwitchToSettings;
|
||||
Resize();
|
||||
|
||||
if (game.checkTask != null && game.checkTask.Done && game.checkTask.Success) {
|
||||
if (game.checkTask.Completed && game.checkTask.Success) {
|
||||
SuccessfulUpdateCheck(game.checkTask);
|
||||
}
|
||||
checkTask = new UpdateCheckTask();
|
||||
checkTask.CheckForUpdatesAsync();
|
||||
checkTask.Init(game);
|
||||
}
|
||||
|
||||
Build dev, stable;
|
||||
public override void Tick() {
|
||||
if (checkTask != null && checkTask.Done) {
|
||||
if (checkTask.Success) SuccessfulUpdateCheck(checkTask);
|
||||
else FailedUpdateCheck(checkTask);
|
||||
checkTask = null;
|
||||
}
|
||||
if (checkTask == null) return;
|
||||
checkTask.Tick();
|
||||
if (!checkTask.Completed) return;
|
||||
|
||||
if (checkTask.Success) SuccessfulUpdateCheck(checkTask);
|
||||
else FailedUpdateCheck(checkTask);
|
||||
checkTask = null;
|
||||
}
|
||||
|
||||
void SuccessfulUpdateCheck(UpdateCheckTask task) {
|
||||
@ -57,7 +59,6 @@ namespace Launcher.Gui.Screens {
|
||||
void FailedUpdateCheck(UpdateCheckTask task) {
|
||||
view.LastStable = DateTime.MaxValue;
|
||||
view.LastDev = DateTime.MaxValue;
|
||||
task.Exception = null;
|
||||
|
||||
Widget w = widgets[view.devIndex - 1];
|
||||
game.ResetArea(w.X, w.Y, w.Width, w.Height);
|
||||
|
@ -167,8 +167,10 @@ namespace Launcher {
|
||||
|
||||
fetcher = new ResourceFetcher();
|
||||
fetcher.CheckResourceExistence();
|
||||
Downloader = new AsyncDownloader(Drawer);
|
||||
Downloader.Init("");
|
||||
checkTask = new UpdateCheckTask();
|
||||
checkTask.CheckForUpdatesAsync();
|
||||
checkTask.Init(this);
|
||||
|
||||
if (!fetcher.AllResourcesExist) {
|
||||
SetScreen(new ResourcesScreen(this));
|
||||
@ -187,6 +189,7 @@ namespace Launcher {
|
||||
break;
|
||||
}
|
||||
|
||||
checkTask.Tick();
|
||||
Screen.Tick();
|
||||
if (Dirty) Display();
|
||||
Thread.Sleep(10);
|
||||
|
@ -1,10 +1,9 @@
|
||||
// ClassicalSharp copyright 2014-2016 UnknownShadow200 | Licensed under MIT
|
||||
using ClassicalSharp;
|
||||
using ClassicalSharp.Network;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Net;
|
||||
using System.Threading;
|
||||
using JsonObject = System.Collections.Generic.Dictionary<string, object>;
|
||||
|
||||
namespace Launcher.Web {
|
||||
@ -16,38 +15,34 @@ namespace Launcher.Web {
|
||||
public string Version;
|
||||
}
|
||||
|
||||
public sealed class UpdateCheckTask : IWebTask {
|
||||
public sealed class UpdateCheckTask {
|
||||
|
||||
public const string UpdatesIdentifier = "cc-update";
|
||||
public const string UpdatesUri = "http://cs.classicube.net/";
|
||||
public const string BuildsUri = "http://cs.classicube.net/builds.json";
|
||||
public Build LatestDev, LatestStable;
|
||||
public LauncherWindow Game;
|
||||
public bool Completed = false, Success = false;
|
||||
|
||||
public void CheckForUpdatesAsync() {
|
||||
Working = true;
|
||||
Done = false;
|
||||
Exception = null;
|
||||
LatestDev = null;
|
||||
LatestStable = null;
|
||||
public void Init(LauncherWindow game) {
|
||||
Game = game;
|
||||
Completed = false;
|
||||
Success = false;
|
||||
Game.Downloader.DownloadPage(BuildsUri, false, UpdatesIdentifier);
|
||||
}
|
||||
|
||||
public void Tick() {
|
||||
if (Completed) return;
|
||||
Request req;
|
||||
if (!Game.Downloader.TryGetItem(UpdatesIdentifier, out req)) return;
|
||||
|
||||
Thread thread = new Thread(UpdateWorker, 256 * 1024);
|
||||
thread.Name = "Launcher.UpdateCheck";
|
||||
thread.Start();
|
||||
Completed = true;
|
||||
Success = req != null && req.Data != null;
|
||||
if (!Success) return;
|
||||
ProcessUpdate((string)req.Data);
|
||||
}
|
||||
|
||||
void UpdateWorker() {
|
||||
try {
|
||||
CheckUpdates();
|
||||
} catch (WebException ex) {
|
||||
Finish(false, ex, null); return;
|
||||
} catch (Exception ex) {
|
||||
ErrorHandler.LogError("UpdateCheckTask.CheckUpdates", ex);
|
||||
Finish(false, null, "&cUpdate check failed"); return;
|
||||
}
|
||||
Finish(true, null, null);
|
||||
}
|
||||
|
||||
void CheckUpdates() {
|
||||
string response = Get(BuildsUri, UpdatesUri);
|
||||
void ProcessUpdate(string response) {
|
||||
int index = 0; bool success = true;
|
||||
JsonObject data = (JsonObject)Json.ParseValue(response, ref index, ref success);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user