From 0d4ac4e3e5f530609e78994b8014a00d971c18c9 Mon Sep 17 00:00:00 2001 From: shmyga Date: Tue, 6 Mar 2018 22:57:07 +0300 Subject: [PATCH] [client] fixes --- package.json | 2 +- src/client/haxe/ru/m/tankz/Init.hx | 4 +- .../haxe/ru/m/tankz/frame/StartFrame.yaml | 22 +-- .../haxe/ru/m/connect/fake/FakeConnection.hx | 18 ++- .../haxe/ru/m/connect/js/JsConnection.hx | 141 +++++++++--------- src/common/haxe/ru/m/tankz/game/Game.hx | 5 +- 6 files changed, 104 insertions(+), 88 deletions(-) diff --git a/package.json b/package.json index 6e48186..7b73b00 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tankz", - "version": "0.7.1", + "version": "0.7.2", "private": true, "devDependencies": { "ansi-colors": "^1.0.1", diff --git a/src/client/haxe/ru/m/tankz/Init.hx b/src/client/haxe/ru/m/tankz/Init.hx index 6542df7..9d40f4d 100644 --- a/src/client/haxe/ru/m/tankz/Init.hx +++ b/src/client/haxe/ru/m/tankz/Init.hx @@ -38,9 +38,9 @@ class Init { #if flash Provider.set(IConnection, new ru.m.connect.flash.FlashConnection('localhost', 5001, Response)); #elseif html5 - Provider.set(IConnection, new ru.m.connect.js.JsConnection('localhost', 5001)); + Provider.set(IConnection, new ru.m.connect.js.JsConnection('localhost', 5001, Response)); #else - Provider.set(IConnection, new ru.m.connect.fake.FakeConnection()); + Provider.set(IConnection, new ru.m.connect.fake.FakeConnection(Response)); #end } } diff --git a/src/client/haxe/ru/m/tankz/frame/StartFrame.yaml b/src/client/haxe/ru/m/tankz/frame/StartFrame.yaml index a19c2f1..6775307 100644 --- a/src/client/haxe/ru/m/tankz/frame/StartFrame.yaml +++ b/src/client/haxe/ru/m/tankz/frame/StartFrame.yaml @@ -55,13 +55,17 @@ views: text: 2 VS $style: button # network -- $type: haxework.gui.LabelView - $style: label - fontSize: 20 - topMargin: 15 +- $type: haxework.gui.VGroupView contentSize: true - text: Network -- id: network - $type: haxework.gui.ButtonView - text: Network - $style: button \ No newline at end of file + visible: false + views: + - $type: haxework.gui.LabelView + $style: label + fontSize: 20 + topMargin: 15 + contentSize: true + text: Network + - id: network + $type: haxework.gui.ButtonView + text: Network + $style: button \ No newline at end of file diff --git a/src/common/haxe/ru/m/connect/fake/FakeConnection.hx b/src/common/haxe/ru/m/connect/fake/FakeConnection.hx index ffeaf22..9d6b657 100644 --- a/src/common/haxe/ru/m/connect/fake/FakeConnection.hx +++ b/src/common/haxe/ru/m/connect/fake/FakeConnection.hx @@ -1,7 +1,19 @@ package ru.m.connect.fake; +import ru.m.connect.IConnection.ConnectionEvent; +import promhx.Promise; +import protohx.Message; -class FakeConnection extends BaseConnection { - override public function connect():Void {} - override public function disconnect():Void {} + +class FakeConnection extends BaseConnection { + + override public function connect():Promise> { + handler.emit(ConnectionEvent.CONNECTED); + var promise:Promise> = cast Promise.promise(this); + return promise; + } + + override public function disconnect():Void { + handler.emit(ConnectionEvent.DISCONNECTED); + } } diff --git a/src/common/haxe/ru/m/connect/js/JsConnection.hx b/src/common/haxe/ru/m/connect/js/JsConnection.hx index 82e357a..3fc5d4f 100644 --- a/src/common/haxe/ru/m/connect/js/JsConnection.hx +++ b/src/common/haxe/ru/m/connect/js/JsConnection.hx @@ -1,82 +1,83 @@ package ru.m.connect.js; -import ru.m.Base64; -import ru.m.connect.IConnection.IConnectionHandler; +import promhx.Promise; import protohx.Message; -import haxe.io.Bytes; +import ru.m.Base64; +import ru.m.connect.IConnection.ConnectionEvent; + typedef WebSocket = { - var onopen:Dynamic->Void; - var onclose:Dynamic->Void; - var onmessage:Dynamic->Void; - var onerror:Dynamic->Void; - function send(message:String):Void; - function emit(a:String, b:String):Void; - function close():Void; + var onopen:Dynamic -> Void; + var onclose:Dynamic -> Void; + var onmessage:Dynamic -> Void; + var onerror:Dynamic -> Void; + function send(message:String):Void; + function emit(a:String, b:String):Void; + function close():Void; } -class JsConnection extends BaseConnection { +class JsConnection extends BaseConnection { - private var host:String; - private var port:Int; - private var socket:WebSocket; + private var host:String; + private var port:Int; + private var socket:WebSocket; - public function new(host:String, port:Int) { - super(); - this.host = host; - this.port = port; - connected = false; - } - - private function buildSocket(host:String, port:Int):WebSocket { - return untyped __js__("new WebSocket('ws://'+host+':'+port);"); - } - - override public function connect():Void { - var self = this; - var decodeBytes = Base64.decodeBase64; - socket = buildSocket(host, port); - socket.onopen = this.onConnect; - socket.onclose = this.onClose; - socket.onerror = this.onError; - socket.onmessage = this.onSocketData; - } - - override public function disconnect():Void { - socket.close(); - connected = false; - handler.dispatch(function(h) h.onDisconnected()); - } - - private function onError(event:Dynamic):Void { - socket.close(); - connected = false; - handler.dispatch(function(h) h.onError(event)); - } - - private function onConnect(_):Void { - connected = true; - handler.dispatch(function(h) h.onConnected()); - } - - private function onClose(_):Void { - socket.close(); - connected = false; - handler.dispatch(function(h) h.onDisconnected()); - } - - private function onSocketData(event:Dynamic):Void { - try { - var data:String = event.data; - var packet = WebSocketTools.string2packet(data, builder); - receive(packet); - } catch (error:Dynamic) { - handler.dispatch(function(h) h.onError(error)); + public function new(host:String, port:Int, i:Class) { + super(i); + this.host = host; + this.port = port; + connected = false; } - } - override public function send(packet:Message):Void { - super.send(packet); - socket.send(WebSocketTools.packet2string(packet, builder)); - } + private function buildSocket(host:String, port:Int):WebSocket { + return untyped __js__("new WebSocket('ws://'+host+':'+port);"); + } + + override public function connect():Promise> { + var self = this; + var decodeBytes = Base64.decodeBase64; + socket = buildSocket(host, port); + socket.onopen = this.onConnect; + socket.onclose = this.onClose; + socket.onerror = this.onError; + socket.onmessage = this.onSocketData; + return connectDeferred.promise(); + } + + override public function disconnect():Void { + socket.close(); + connected = false; + } + + private function onError(event:Dynamic):Void { + socket.close(); + connected = false; + handler.emit(ConnectionEvent.ERROR(event)); + } + + private function onConnect(_):Void { + connected = true; + handler.emit(ConnectionEvent.CONNECTED); + } + + private function onClose(_):Void { + socket.close(); + connected = false; + handler.emit(ConnectionEvent.DISCONNECTED); + } + + private function onSocketData(event:Dynamic):Void { + try { + var data:String = event.data; + var packet:I = WebSocketTools.string2packet(data, queue.packetClass); + receive(packet); + } catch (error:Dynamic) { + handler.emit(ConnectionEvent.ERROR(event)); + } + } + + override public function send(packet:O):Void { + super.send(packet); + socket.send(WebSocketTools.packet2string(packet)); + } } \ No newline at end of file diff --git a/src/common/haxe/ru/m/tankz/game/Game.hx b/src/common/haxe/ru/m/tankz/game/Game.hx index 50067d4..7cc0d62 100644 --- a/src/common/haxe/ru/m/tankz/game/Game.hx +++ b/src/common/haxe/ru/m/tankz/game/Game.hx @@ -224,10 +224,9 @@ class Game { } public function next():Option { - var level = state.level + 1; state.level++; - if (level >= config.game.levels) level = 0; - return Option.Some({type: state.type, presetId: preset.id, level: level}); + if (state.level >= config.game.levels) state.level = 0; + return Option.Some({type: state.type, presetId: preset.id, level: state.level}); } public function dispose():Void {