![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Mar 2009
Сообщений: 7
|
Долго смотрели, пускали по шагам в дебаггере, где ошибка понять не можем.. Такой код:
public class DataReceiving { private const ginza_ip = "нужный айпи"; private var client = new Socket(); private var client2 = new Socket(); private var char_inf = new ByteArray(); private var player_array:Array = new Array(); private var inventory:Array = new Array(); private var OnPlInv:Array = new Array(); public function DataReceiving() { client2.addEventListener(Event.CONNECT, connectListener2); client2.addEventListener(Event.CLOSE, closeListener2); client2.connect(ginza_ip, 1024); client.addEventListener(Event.CONNECT, connectListener); client.addEventListener(Event.CLOSE, closeListener); client.addEventListener(ProgressEvent.SOCKET_DATA, socketDataListener); client.connect(ginza_ip, 5000); } public function parseArr(arr:ByteArray) { player_array.push(arr.readByte()); trace(player_array[player_array.length-1]); player_array.push(arr.readByte()); trace(player_array[player_array.length-1]); for (var i=0; i<9; i++) { player_array.push(arr.readShort()); trace(player_array[player_array.length-1]); } var clothes:ByteArray = new ByteArray(); for (var j=20;j<arr.length;j++) { clothes[j-20]=arr[j]; } if (clothes.length != 0) parseItem(clothes); } private function parseItem(arr2:ByteArray) { var cust_invent:Array = new Array(); cust_invent.push(arr2.readShort()); cust_invent.push(arr2.readShort()); cust_invent.push(arr2.readByte()); cust_invent.push(arr2.readShort()); cust_invent.push(arr2.readShort()); cust_invent.push(arr2.readShort()); for (var i=0;i<6;i++) { trace(cust_invent[i]); } cust_invent.push(arr2.readUTFBytes(cust_invent[cust_invent.length-1]*2-1)); trace(cust_invent[cust_invent.length-1]); for (var i=0;i<22;i++) { cust_invent.push(arr2.readShort()); trace(cust_invent[cust_invent.length-1]); } if (cust_invent[2]==0) { inventory.push(cust_invent); trace ("PlayerInvent - "+inventory[inventory.length-1]);} if (cust_invent[2]==1) { if (cust_invent[3]==1) { OnPlInv.push(cust_invent); trace ("OnPlayerInvent - "+OnPlInv[OnPlInv.length-1]); } else { var new_arr:Array = cust_invent; cust_invent[3]=cust_invent[3]-1; cust_invent[2]=0; inventory.push(cust_invent); new_arr[3]=1; OnPlInv.push(new_arr); trace ("OnPlayerInvent - "+OnPlInv[OnPlInv.length-1]); } } var arr3:ByteArray = new ByteArray(); arr3.length = 0; for (var j=arr2.position;j<arr2.length;j++) arr3[j-arr2.position]=arr2[j]; trace("length3 = "+arr3.length); if (arr3.length > 0) parseItem(arr3); } public function getPlayerArr():Array{ return player_array; } public function getPlayerInv():Array{ trace("getPlayerInv inventory length:"+inventory.length); return inventory; } public function getOnPlayerInv():Array{ trace("getOnPlayerInv inventory length:"+OnPlInv.length); return OnPlInv; } private function socketDataListener (e:ProgressEvent):void { trace ("New socket data arrived."); client.readBytes(char_inf, 0, 0); parseArr(char_inf); trace("Player_array.length = "+player_array.length); trace("Invent_arr.length = "+inventory.length); trace("On PLayerArr.length = "+OnPlInv.length); } private function connectListener2 (e:Event):void { trace("Connected2! Waiting for data..."); } private function connectListener (e:Event):void { trace("Connected! Waiting for data..."); client.writeByte(0x20); var pass = "lohness1"; var nick = "Ginza9"; var arr = new ByteArray(); var arr2 = new ByteArray(); arr2.writeUTFBytes(pass); arr.writeUTFBytes(nick); client.writeShort(arr.length); client.writeBytes(arr); client.writeShort(arr2.length); client.writeBytes(arr2); } private function closeListener (e:Event):void { trace("Close socket"); } private function closeListener2 (e:Event):void { trace("Close socket2"); } } } в ходе обработки массива байт (фуекции parseArr и parseItem) все хорошо, и в эти массивы добавляются данные. затем, в функциях getPlayerArr(), getPlayerInv() и getOnPlayerInv() эти массивы каким то образом обнуляются.. почему - совершенно непонятно.. Есть идеи? Заранее спасибо за помощь =) |
|
|||||
|
Регистрация: Mar 2009
Сообщений: 7
|
Да нет, вызывается сначала parseArr(), потом getPlayerArr()..
вот код основного класса, из которого идет вызов. public static var simple:SimpleGame = new SimpleGame(); public static var onPlayerArr:Array = new Array(); public static var inventArr:Array = new Array(); public var pdata:DataReceiving; public function SimpleGame () { pdata = new DataReceiving(); var vrem1:Array = pdata.getPlayerArr(); var vrem2:Array = pdata.getPlayerInv(); trace(vrem2[0]); var vrem3:Array = pdata.getOnPlayerInv(); trace(vrem3[0]); for (var i=0; i<vrem2.length; i++) { inventArr[i] = new Item(vrem2[i]); } for (var i=0; i<vrem3.length; i++) { onPlayerArr[i] = new Item(vrem3[i]); } } |
|
|||||
|
Modus ponens
|
Ну и где же она раньше вызывается?
сначала нужно дождаться когда socketDataListener() вызовется, а потом уже getPlayerArr() вызывать...
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Mar 2009
Сообщений: 7
|
Нуу.. Я вобще думал, что сначала выполнится конструктор DataReceiving, а потом уже программа пойдет дальше..
А как тогда дождаться этого, не подскажете? |
|
|||||
|
Modus ponens
|
Конструктор конечно выполниться раньше, только он тут при чем? Вот точно так же, как вы подписались на ProgressEvent подпишитесь на событие извещающее о том, что данные получены.
АS не выполняет практически никакие операции по загрузке синхронно (за исключением FileStream и еще нескольких моментов в работе с файловой системой).
__________________
Hell is the possibility of sanity |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:02. |
|
|
« Предыдущая тема | Следующая тема » |
|
|