diff --git a/src/common/haxe/ru/m/connect/PacketQueue.hx b/src/common/haxe/ru/m/connect/PacketQueue.hx index 8e82eb9..1dcd130 100755 --- a/src/common/haxe/ru/m/connect/PacketQueue.hx +++ b/src/common/haxe/ru/m/connect/PacketQueue.hx @@ -1,5 +1,6 @@ package ru.m.connect; +import Reflect; import haxe.io.Bytes; import haxe.io.BytesBuffer; import haxe.io.BytesInput; @@ -9,12 +10,13 @@ class PacketQueue { public var packetClass(default, null):Class

; - private var bytesBuff:Bytes; + private var buffer:BytesBuffer; private var msgs:List

; public function new(packetClass:Class

) { this.packetClass = packetClass; msgs = new List

(); + buffer = new BytesBuffer(); } public inline function hasMsg():Bool { @@ -29,50 +31,41 @@ class PacketQueue { msgs.add(msg); } - public function addBytes(bytes:Bytes):Void { - if (bytes == null) { - return; - } - if (bytesBuff == null) { - bytesBuff = bytes; - } else { - var buffer = new BytesBuffer(); - buffer.add(bytesBuff); - buffer.add(bytes); - bytesBuff = buffer.getBytes(); - } - if (bytesBuff == null || bytesBuff.length < 1) { - return; - } - var available = bytesBuff.length; - var bi = new BytesInput(bytesBuff); - bi.bigEndian = false; - while (available > 0) { - var packetSize = bi.readUInt16(); - available -= 2; - if (packetSize <= available) { - var msgBytes = bi.read(packetSize); + private function readPackage():Null

{ + var bytes = buffer.getBytes(); + var input = new BytesInput(bytes); + input.bigEndian = false; + if (input.length > 1) { + var packetSize = input.readUInt16(); + if (input.length >= packetSize + 2) { var packet:P = Type.createInstance(packetClass, []); - packet.mergeFrom(msgBytes); - addMsg(packet); - available -= packetSize; - } else { - break; + try { + packet.mergeFrom(input.read(packetSize)); + buffer = new BytesBuffer(); + buffer.add(input.read(input.length - (packetSize + 2))); + return packet; + } catch (error:Dynamic) { + L.w("PacketQueue", "readPackage ", error); + buffer = new BytesBuffer(); + return null; + } } } - if (available == 0) { - bytesBuff = null; - } else if (available > 0) { - if (bytesBuff.length != available) { - var pos = bytesBuff.length - available; - bytesBuff = bytesBuff.sub(pos, available); - } - } else { - throw "Wrong available: " + available; + buffer = new BytesBuffer(); + buffer.add(bytes); + return null; + } + + public function addBytes(bytes:Bytes):Void { + buffer.add(bytes); + var packet = readPackage(); + while (packet != null) { + msgs.add(packet); + packet = readPackage(); } } public function clean():Void { - bytesBuff = null; + buffer = new BytesBuffer(); } } diff --git a/src/common/haxe/ru/m/connect/flash/FlashConnection.hx b/src/common/haxe/ru/m/connect/flash/FlashConnection.hx index 5d7437f..a798c66 100755 --- a/src/common/haxe/ru/m/connect/flash/FlashConnection.hx +++ b/src/common/haxe/ru/m/connect/flash/FlashConnection.hx @@ -74,16 +74,10 @@ class FlashConnection extends BaseConnection { } private function onSocketData(_):Void { - try { - var data = new flash.utils.ByteArray(); - socket.readBytes(data); - var bytes = Bytes.ofData(data); - pushData(bytes); - } catch (error:Dynamic) { - L.w("Connection", "onSocketData ", error); - queue.clean(); - //handler.emit(ConnectionEvent.ERROR(error)); - } + var data = new flash.utils.ByteArray(); + socket.readBytes(data); + var bytes = Bytes.ofData(data); + pushData(bytes); } private function _send(packet:O):Void { diff --git a/src/common/haxe/ru/m/connect/js/JsConnection.hx b/src/common/haxe/ru/m/connect/js/JsConnection.hx index 539ba5b..5e11cd1 100644 --- a/src/common/haxe/ru/m/connect/js/JsConnection.hx +++ b/src/common/haxe/ru/m/connect/js/JsConnection.hx @@ -21,7 +21,7 @@ class JsConnection extends BaseConnection { this.port = port; connected = false; } - + public static function isSecured():Bool { return Browser.location.protocol == "https:"; } diff --git a/src/common/haxe/ru/m/tankz/config/Config.hx b/src/common/haxe/ru/m/tankz/config/Config.hx index a73a1cc..ad7e079 100644 --- a/src/common/haxe/ru/m/tankz/config/Config.hx +++ b/src/common/haxe/ru/m/tankz/config/Config.hx @@ -51,8 +51,8 @@ typedef TankConfig = { var speed:Float; var bullet:BulletConfig; var bullets:Int; - var hits:Int; var skin:String; + @:optinal var hits:Int; @:optinal var upgrade:TankType; @:optinal var downgrade:TankType; @:optinal var score:Int; diff --git a/src/common/resources/classic/config.yaml b/src/common/resources/classic/config.yaml index 14a65ec..17d93dc 100644 --- a/src/common/resources/classic/config.yaml +++ b/src/common/resources/classic/config.yaml @@ -163,7 +163,7 @@ presets: - {<<: *team_human} - id: bot spawnInterval: 3000 - life: 1 + life: 10 players: - {<<: *bot, index: 0, control: bot-stupid} - {<<: *bot, index: 1, control: bot-stupid}