Показать сообщение отдельно
Старый 01.04.2009, 01:46
Zergbar вне форума Посмотреть профиль Отправить личное сообщение для Zergbar Найти все сообщения от Zergbar
  № 1  
Ответить с цитированием
Zergbar

Регистрация: Mar 2009
Сообщений: 7
Question Непонятная ошибка(

Долго смотрели, пускали по шагам в дебаггере, где ошибка понять не можем.. Такой код:

Код AS3:
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");
		} 
	}
}
проблема с массивами player_array, inventory, OnPlInv.
в ходе обработки массива байт (фуекции parseArr и parseItem) все хорошо, и в эти массивы добавляются данные. затем, в функциях getPlayerArr(), getPlayerInv() и getOnPlayerInv() эти массивы каким то образом обнуляются.. почему - совершенно непонятно.. Есть идеи?
Заранее спасибо за помощь =)