Improve exception handling for update checker.
This commit is contained in:
@@ -13,24 +13,40 @@ using ThreadPriority = System.Threading.ThreadPriority;
|
||||
namespace Cryville.Crtr.Network {
|
||||
public class UpdateChecker : MonoBehaviour {
|
||||
string _currentVersion;
|
||||
Thread _thread;
|
||||
#pragma warning disable IDE0044
|
||||
bool _shutdown;
|
||||
#pragma warning restore IDE0044
|
||||
void Start() {
|
||||
_currentVersion = Application.version;
|
||||
new Thread(CheckVersion) { IsBackground = true, Priority = ThreadPriority.BelowNormal }.Start();
|
||||
_thread = new Thread(ThreadLogic) { IsBackground = true, Priority = ThreadPriority.BelowNormal };
|
||||
_thread.Start();
|
||||
}
|
||||
void Update() {
|
||||
if (!_thread.IsAlive) {
|
||||
Destroy(gameObject);
|
||||
if (_shutdown) Application.Quit();
|
||||
}
|
||||
}
|
||||
static readonly Uri BaseUri = new Uri("https://www.cryville.world/api/crtr/index");
|
||||
List<VersionInfo> _versions;
|
||||
public void CheckVersion() {
|
||||
void ThreadLogic() {
|
||||
try {
|
||||
var client = new Https11Client(BaseUri);
|
||||
client.Connect();
|
||||
var response = client.Request("GET", new Uri(BaseUri, "versions"));
|
||||
var data = Encoding.UTF8.GetString(response.MessageBody.ReadToEnd());
|
||||
_versions = JsonConvert.DeserializeObject<List<VersionInfo>>(data, Game.GlobalJsonSerializerSettings);
|
||||
CheckVersion();
|
||||
Logger.Log("main", 0, "Network", "Update checker exited normally");
|
||||
}
|
||||
catch (Exception ex) {
|
||||
Logger.Log("main", 4, "Network", "An error occurred while checking for update: {0}", ex);
|
||||
Dialog.Show(null, "Failed to check for update.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
void CheckVersion() {
|
||||
using (var client = new Https11Client(BaseUri)) {
|
||||
client.Connect();
|
||||
using (var response = client.Request("GET", new Uri(BaseUri, "versions"))) {
|
||||
var data = Encoding.UTF8.GetString(response.MessageBody.ReadToEnd());
|
||||
_versions = JsonConvert.DeserializeObject<List<VersionInfo>>(data, Game.GlobalJsonSerializerSettings);
|
||||
}
|
||||
}
|
||||
var availableVersions = _versions.Where(v => v.platforms.ContainsKey(PlatformConfig.Name)).ToArray();
|
||||
var versionIndex = new Dictionary<string, int>(availableVersions.Length);
|
||||
|
Reference in New Issue
Block a user