[client] add Updater

This commit is contained in:
2019-08-29 17:43:05 +03:00
parent d9cce32bb8
commit e032c25e1a
4 changed files with 96 additions and 1 deletions

View File

@@ -0,0 +1,72 @@
package ru.m;
import haxework.net.JsonLoader;
import openfl.Lib;
import openfl.net.URLRequest;
import promhx.Promise;
typedef PackageInfo = {
var type:String;
var path:String;
var filename:String;
var url:String;
}
typedef PackagesBundle = {
var name:String;
var version:String;
var packages:Array<PackageInfo>;
}
class Updater {
private static inline var TAG = "Update";
public var type(get, null):String;
public var bundle(default, null):PackagesBundle;
private var url:String;
private var version:String;
public function new(version:String, url:String) {
this.url = url;
this.version = version;
}
private function get_type():String {
#if android
return "android";
#elseif linux
return "debian";
#else
return null;
#end
}
private function resolveBundle():Promise<PackagesBundle> {
return bundle != null ? Promise.promise(bundle) : new JsonLoader().GET(url).then(function(bundle) {
this.bundle = bundle;
return this.bundle;
});
}
public function check():Promise<Bool> {
return resolveBundle().then(function(bundle:PackagesBundle):Bool {
this.bundle = bundle;
return bundle.version != version && Lambda.exists(bundle.packages, function(item) return item.type == type);
});
}
public function download():Promise<Bool> {
return resolveBundle().then(function(bundle:PackagesBundle) {
for (item in bundle.packages) {
if (item.type == type) {
L.i(TAG, 'download: ${item.url}');
Lib.getURL(new URLRequest(item.url));
return true;
}
}
return false;
});
}
}

View File

@@ -1,12 +1,14 @@
package ru.m.tankz; package ru.m.tankz;
import haxework.view.theme.ITheme;
import flash.Lib; import flash.Lib;
import haxework.animate.FadeAnimate; import haxework.animate.FadeAnimate;
import haxework.animate.UnFadeAnimate; import haxework.animate.UnFadeAnimate;
import haxework.net.manage.ILoaderManager;
import haxework.net.manage.LoaderManager;
import haxework.resources.IResources; import haxework.resources.IResources;
import haxework.resources.Resources; import haxework.resources.Resources;
import haxework.view.popup.PopupManager; import haxework.view.popup.PopupManager;
import haxework.view.theme.ITheme;
import lime.ui.Gamepad; import lime.ui.Gamepad;
import lime.ui.Joystick; import lime.ui.Joystick;
import ru.m.connect.IConnection; import ru.m.connect.IConnection;
@@ -42,6 +44,8 @@ class Init {
@:provide static var popupManager:PopupManager; @:provide static var popupManager:PopupManager;
@:provide static var connection:IConnection<Request, Response>; @:provide static var connection:IConnection<Request, Response>;
@:provide static var bus:IControlBus; @:provide static var bus:IControlBus;
@:provide static var loaderManager:ILoaderManager;
@:provide static var updater:Updater;
private static function buildConnection():IConnection<Request, Response> { private static function buildConnection():IConnection<Request, Response> {
var host:String = CompilationOption.get("host"); var host:String = CompilationOption.get("host");
@@ -77,6 +81,9 @@ class Init {
bus = new ControlBus(); bus = new ControlBus();
bus.connect(new KeyboardDevice(Lib.current.stage)); bus.connect(new KeyboardDevice(Lib.current.stage));
loaderManager = new LoaderManager();
updater = new Updater(Const.VERSION, "https://shmyga.ru/repo/tankz/packages.json");
for (device in Gamepad.devices) { for (device in Gamepad.devices) {
trace('gamepad', device); trace('gamepad', device);
} }

View File

@@ -19,10 +19,12 @@ import ru.m.tankz.view.popup.LoginPopup;
@:provide var gameInit:GameInit; @:provide var gameInit:GameInit;
@:provide var switcher:FrameSwitcher; @:provide var switcher:FrameSwitcher;
@:provide var network:NetworkManager; @:provide var network:NetworkManager;
@:provide var appUpdater:Updater;
@:view var username:LabelView; @:view var username:LabelView;
@:view("login") var loginButton:ButtonView; @:view("login") var loginButton:ButtonView;
@:view("logout") var logoutButton:ButtonView; @:view("logout") var logoutButton:ButtonView;
@:view("update") var updateButton:ButtonView;
public function new() { public function new() {
super(ID); super(ID);
@@ -32,6 +34,12 @@ import ru.m.tankz.view.popup.LoginPopup;
super.onShow(data); super.onShow(data);
network.stateSignal.connect(onConnectionState); network.stateSignal.connect(onConnectionState);
onConnectionState(network.state); onConnectionState(network.state);
appUpdater.check().then(function(update:Bool) {
updateButton.visible = update;
if (update) {
updateButton.text = 'Update ${appUpdater.bundle.version}';
}
});
} }
override public function onHide():Void { override public function onHide():Void {
@@ -93,4 +101,8 @@ import ru.m.tankz.view.popup.LoginPopup;
private function logout():Void { private function logout():Void {
network.logout(); network.logout();
} }
private function appUpdate():Void {
appUpdater.download();
}
} }

View File

@@ -72,3 +72,7 @@ views:
visible: false visible: false
- $type: haxework.view.SpriteView - $type: haxework.view.SpriteView
geometry.width: 50% geometry.width: 50%
- id: update
$type: haxework.view.form.ButtonView
+onPress: ~appUpdate()
visible: false