diff --git a/project.xml b/project.xml index 6ed7070..3d6853b 100755 --- a/project.xml +++ b/project.xml @@ -5,12 +5,15 @@ + + + diff --git a/res/layout/main.json b/res/layout/main.json new file mode 100755 index 0000000..ff0199f --- /dev/null +++ b/res/layout/main.json @@ -0,0 +1,50 @@ +{ + "type":"haxework.gui.VGroupView", + "paddings":10, + "layoutMargin":10, + "skin":{"type":"haxework.gui.skin.ColorSkin", "color":"0x000000"}, + "views":[ + { + "id":"panel", + "type":"haxework.gui.HGroupView", + "layoutHAlign":"LEFT", + "pWidth":100, + "height":30, + "paddings":3, + "layoutMargin":3, + "skin":{"type":"haxework.gui.skin.ColorSkin", "color":"0x505050"}, + "views":[ + { + "id":"login", + "type":"haxework.gui.ButtonView", + "width":100, + "pHeight":100, + "skin":{"type":"haxework.gui.skin.ButtonColorSkin"}, + "text":"Login", + "onPress":"#listener" + }, + { + "id":"connection_state", + "type":"haxework.gui.LabelView", + "width":150, + "pHeight":100, + "text":"Disconnected" + }, + { + "id":"nickname", + "type":"haxework.gui.LabelView", + "width":150, + "pHeight":100, + "text":"" + } + ] + }, + + { + "type":"haxework.gui.SpriteView", + "pWidth":100, + "pHeight":100, + "skin":{"type":"haxework.gui.skin.ColorSkin", "color":"0x000000"} + } + ] +} \ No newline at end of file diff --git a/src/client/haxe/ru/m/armageddon/client/Client.hx b/src/client/haxe/ru/m/armageddon/client/Client.hx index e5e8032..2a9bc09 100755 --- a/src/client/haxe/ru/m/armageddon/client/Client.hx +++ b/src/client/haxe/ru/m/armageddon/client/Client.hx @@ -1,11 +1,18 @@ package ru.m.armageddon.client; +import haxework.gui.LabelView; +import haxework.gui.ButtonView; +import haxework.gui.Root; +import haxework.gui.GuiBuilder; +import flash.display.Sprite; +import haxework.gui.IGroupView; +import haxe.Json; +import openfl.Assets; +import haxe.Timer; import ru.m.armageddon.proto.User; import ru.m.armageddon.proto.LoginResponse; import protohx.Message; import haxe.crypto.Md5; -import flash.Lib; -import flash.events.MouseEvent; import ru.m.armageddon.core.connect.flash.FlashConnection; import ru.m.armageddon.core.connect.IConnection; import haxework.log.TraceLogger; @@ -25,15 +32,37 @@ class Client implements IConnectionHandler { private var connection:IConnection; private var user:User; - public function new() { - connection = new FlashConnection("localhost", 5000, this); + private var loginButton:ButtonView; + private var connectionStateLabel:LabelView; + private var nicknameLabel:LabelView; - Lib.current.stage.addEventListener(MouseEvent.CLICK, function(_) { - onConnected(); - }); + public function new() { + var bytes = Assets.getBytes("res/layout/main.json"); + var form:Dynamic = Json.parse(bytes.readUTFBytes(bytes.bytesAvailable)); + var v:IGroupView = GuiBuilder.build(form, {listener:this}); + new Root(v); + loginButton = v.findViewById("panel:login"); + connectionStateLabel = v.findViewById("panel:connection_state"); + nicknameLabel = v.findViewById("panel:nickname"); + + connection = new FlashConnection("localhost", 5000, this); + } + + private function refreshUI():Void { + connectionStateLabel.text = connection.connected ? "Connected" : "Disconnected"; + nicknameLabel.text = user == null ? "" : user.nickname; + loginButton.disabled = connection.connected && user != null; + } + + public function onPress(view:ButtonView):Void { + switch (view.id) { + case "login": + connection.connect(); + } } public function onConnected():Void { + refreshUI(); connection.send( new LoginRequest() .setLogin("shmyga") @@ -42,16 +71,18 @@ class Client implements IConnectionHandler { } public function onDisconnected():Void { - + this.user = null; + refreshUI(); } public function onError(error:Dynamic):Void { - + this.user = null; + refreshUI(); } public function onLoginResponse(packet:LoginResponse):Void { this.user = packet.user; - L.d(TAG, "Loginned: " + user.nickname); + refreshUI(); } public function onPacket(packet:Message):Void { diff --git a/src/common/haxe/ru/m/armageddon/core/connect/BaseConnection.hx b/src/common/haxe/ru/m/armageddon/core/connect/BaseConnection.hx index 51931ef..81d57c0 100755 --- a/src/common/haxe/ru/m/armageddon/core/connect/BaseConnection.hx +++ b/src/common/haxe/ru/m/armageddon/core/connect/BaseConnection.hx @@ -5,6 +5,7 @@ import protohx.Message; import ru.m.armageddon.core.connect.IConnection; class BaseConnection implements IConnection { + public var connected(default, null):Bool; private var builder:IPacketBuilder; private var handler:IConnectionHandler; @@ -14,6 +15,8 @@ class BaseConnection implements IConnection { this.handler = handler; } + public function connect():Void {} + public function pushData(bytes:Bytes):Void {} public function send(packet:Message):Void {} diff --git a/src/common/haxe/ru/m/armageddon/core/connect/IConnection.hx b/src/common/haxe/ru/m/armageddon/core/connect/IConnection.hx index d71edf2..a6f44e4 100755 --- a/src/common/haxe/ru/m/armageddon/core/connect/IConnection.hx +++ b/src/common/haxe/ru/m/armageddon/core/connect/IConnection.hx @@ -4,8 +4,12 @@ import haxe.io.Bytes; import protohx.Message; interface IConnection { + public var connected(default, null):Bool; + private var builder:IPacketBuilder; private var handler:IConnectionHandler; + + public function connect():Void; public function send(packet:Message):Void; public function pushData(bytes:Bytes):Void; private function receive(packet:Message):Void; diff --git a/src/common/haxe/ru/m/armageddon/core/connect/flash/FlashConnection.hx b/src/common/haxe/ru/m/armageddon/core/connect/flash/FlashConnection.hx index c86cd0e..ff00f17 100755 --- a/src/common/haxe/ru/m/armageddon/core/connect/flash/FlashConnection.hx +++ b/src/common/haxe/ru/m/armageddon/core/connect/flash/FlashConnection.hx @@ -14,10 +14,15 @@ import flash.net.Socket; class FlashConnection extends BaseConnection { + private var host:String; + private var port:Int; private var socket:Socket; public function new(host:String, port:Int, handler:IConnectionHandler) { super(handler); + this.host = host; + this.port = port; + connected = false; socket = new Socket(); socket.addEventListener(IOErrorEvent.IO_ERROR, onError); socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onError); @@ -25,18 +30,27 @@ class FlashConnection extends BaseConnection { socket.addEventListener(Event.CONNECT, onConnect); socket.addEventListener(ProgressEvent.SOCKET_DATA, onSocketData); socket.endian = Endian.LITTLE_ENDIAN; + //socket.connect(host, port); + } + + override public function connect():Void { socket.connect(host, port); } private function onError(event:ErrorEvent):Void { + socket.close(); + connected = false; handler.onError(event); } private function onConnect(_):Void { + connected = true; handler.onConnected(); } private function onClose(_):Void { + socket.close(); + connected = false; handler.onDisconnected(); }