[client] add Updater
This commit is contained in:
72
src/client/haxe/ru/m/Updater.hx
Normal file
72
src/client/haxe/ru/m/Updater.hx
Normal 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;
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,14 @@
|
||||
package ru.m.tankz;
|
||||
|
||||
import haxework.view.theme.ITheme;
|
||||
import flash.Lib;
|
||||
import haxework.animate.FadeAnimate;
|
||||
import haxework.animate.UnFadeAnimate;
|
||||
import haxework.net.manage.ILoaderManager;
|
||||
import haxework.net.manage.LoaderManager;
|
||||
import haxework.resources.IResources;
|
||||
import haxework.resources.Resources;
|
||||
import haxework.view.popup.PopupManager;
|
||||
import haxework.view.theme.ITheme;
|
||||
import lime.ui.Gamepad;
|
||||
import lime.ui.Joystick;
|
||||
import ru.m.connect.IConnection;
|
||||
@@ -42,6 +44,8 @@ class Init {
|
||||
@:provide static var popupManager:PopupManager;
|
||||
@:provide static var connection:IConnection<Request, Response>;
|
||||
@:provide static var bus:IControlBus;
|
||||
@:provide static var loaderManager:ILoaderManager;
|
||||
@:provide static var updater:Updater;
|
||||
|
||||
private static function buildConnection():IConnection<Request, Response> {
|
||||
var host:String = CompilationOption.get("host");
|
||||
@@ -77,6 +81,9 @@ class Init {
|
||||
bus = new ControlBus();
|
||||
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) {
|
||||
trace('gamepad', device);
|
||||
}
|
||||
|
||||
@@ -19,10 +19,12 @@ import ru.m.tankz.view.popup.LoginPopup;
|
||||
@:provide var gameInit:GameInit;
|
||||
@:provide var switcher:FrameSwitcher;
|
||||
@:provide var network:NetworkManager;
|
||||
@:provide var appUpdater:Updater;
|
||||
|
||||
@:view var username:LabelView;
|
||||
@:view("login") var loginButton:ButtonView;
|
||||
@:view("logout") var logoutButton:ButtonView;
|
||||
@:view("update") var updateButton:ButtonView;
|
||||
|
||||
public function new() {
|
||||
super(ID);
|
||||
@@ -32,6 +34,12 @@ import ru.m.tankz.view.popup.LoginPopup;
|
||||
super.onShow(data);
|
||||
network.stateSignal.connect(onConnectionState);
|
||||
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 {
|
||||
@@ -93,4 +101,8 @@ import ru.m.tankz.view.popup.LoginPopup;
|
||||
private function logout():Void {
|
||||
network.logout();
|
||||
}
|
||||
|
||||
private function appUpdate():Void {
|
||||
appUpdater.download();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,3 +72,7 @@ views:
|
||||
visible: false
|
||||
- $type: haxework.view.SpriteView
|
||||
geometry.width: 50%
|
||||
- id: update
|
||||
$type: haxework.view.form.ButtonView
|
||||
+onPress: ~appUpdate()
|
||||
visible: false
|
||||
|
||||
Reference in New Issue
Block a user