Есть у меня задача - модернизировать приложение, написанное в кадрах. Суть модернизации - передавать массивы через бинарный сокет. Так как переписывать всё приложение под классы долго, был найден легкий выход - написать отдельно класс, который принимает ответ сокета, ответ записывается в массив и приложение из массива считывает данные. Если брать передачу 1 элемента - всё получилось. А вот с передачей массива проблема. Прошу указать видимые неточности в коде:
1. Упаковка и отправка данных:
Код AS3:
function send(e:Event):void {
// массив байт для посылки...
var sendBytes:ByteArray = new ByteArray();
// байты самого сообщения...
var mBytes:ByteArray = new ByteArray();
// запишем сюда массив...
for (var i:int = 0; i < Danni.length; i++) {
mBytes.writeUTFBytes(Danni[i]);
trace("bytes.position is: " + mBytes.position);
}
mBytes.writeUTFBytes(JSON.stringify(Danni));
// запишем длину сообщения...
sendBytes.writeInt(mBytes.length);
// запишем сам массив байт сообщения...
sendBytes.writeBytes(mBytes);
// отошлем байты...
_socket.writeBytes(sendBytes);
_socket.flush();
}
2. Обработка сокетом:
Код:
....
linkForServer.sendMessage((double)decoded_message.get("Danni"), uid);
....
public void sendMessage(double Danni, long uid) throws Exception {
// json с сообщением...
JSONObject messageJSON = new JSONObject();
messageJSON.put("uid", uid);
messageJSON.put("Danni", Danni);
....
3. И обработка данных, что пришли:
Код AS3:
...
public var DanniM:Array
....
var decodedMessage:Object = JSON.parse(user_message);
for (var i:int = 0; i < decodedMessage.length; i++) {
DanniM[i] = decodedMessage.Danni[i];
}