Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.10.2011, 23:39
trng вне форума Посмотреть профиль Отправить личное сообщение для trng Найти все сообщения от trng
  № 1  
Ответить с цитированием
trng

Регистрация: Jun 2011
Сообщений: 212
По умолчанию Zend_Amf, AMFPHP и т.д.: сериализация в Vector.<T>?

Уважаемый wvxvw озвучил:
Цитата:
"Vector.<T> появился после того, как был написан AMF3.0 формат, и по-этому пока-что не используется в сериализации"
(http://www.flasher.ru/forum/showpost...10&postcount=5)

Правильно ли я понимаю:
За прошедший месяц ситуация не поменялась и на сегодняшний день ни один из amf-серверов не сериализует (нормально не сериализует) вектора.

Может, все таки уже есть сдвиги в лучшую сторону?
Сильно надо.

Старый 07.10.2011, 10:50
Dimitry_II вне форума Посмотреть профиль Отправить личное сообщение для Dimitry_II Найти все сообщения от Dimitry_II
  № 2  
Ответить с цитированием
Dimitry_II

Регистрация: Jan 2010
Сообщений: 211
А вектор, случаем, не устаревший интерфейс?

Старый 07.10.2011, 11:03
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 3  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Наоборот обновленный , как на хабре написано http://habrahabr.ru/blogs/Flash_Platform/122178/ . если есть желание можете сами реализовать десереализатор
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 07.10.2011, 12:42
trng вне форума Посмотреть профиль Отправить личное сообщение для trng Найти все сообщения от trng
  № 4  
Ответить с цитированием
trng

Регистрация: Jun 2011
Сообщений: 212
Цитата:
Сообщение от Genzo Посмотреть сообщение
Наоборот обновленный , как на хабре написано http://habrahabr.ru/blogs/Flash_Platform/122178/ . если есть желание можете сами реализовать десереализатор
Читаем по ссылке:

Цитата:
В итоге патч для Zend_Amf так и не был написан ... найдётся много желающих, готовых реализовать поддержку векторов в Zend_Amf, AMFPHP, WebORB, PyAMF и остальных.
Получается, что НИ ОДИН из amf-серверов таки не поддерживает векторы. На сегодня.

Старый 07.10.2011, 12:47
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 5  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Читаем выше :
Цитата:
если есть желание можете сами реализовать десереализатор
Добавлено через 34 секунды
Спецификация дана , написать не сложно
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 07.10.2011, 14:08
trng вне форума Посмотреть профиль Отправить личное сообщение для trng Найти все сообщения от trng
  № 6  
Ответить с цитированием
trng

Регистрация: Jun 2011
Сообщений: 212
А вот как раз со спецификацией есть нюансы. А именно с длинной вектора, которая вроде как должна быть U29.
Пишем вот такой нехитрый код (Vector.<uint> - для примера):
Код AS3:
function traceHex(data:Vector.<uint>):void {
	var ba:ByteArray = new ByteArray();
	ba.writeObject(data);
	var s:String = data.length.toString() + ' : ';
 
	// чисто оформительское обрезание:
	// признак вектора  (1 байт) + длина (макс. 4 байта) + U8 + данные (одно uint 4 байта) = 10
	var j:int = (ba.length > 10) ? 10 : ba.length;
 
	for (var i:int=0;i<j;i++) {
		if (ba[i] < 0x10) s += '0'; 
		s +=  ba[i].toString(16).toUpperCase() + ' ';
	}
	trace (s);
}
 
var la:Array = new Array(1, 2, 0x10, 0xff, 0xffff, 0xffffff);
var bh:Vector.<uint>;
 
 
bh = new Vector.<uint>(0);
traceHex( bh );
 
 
for (var i:int=0;i<la.length;i++) {
   bh = new Vector.<uint>(la[i]);
   bh[0] = 0x90807060; // чтобы было видно начало вектора
   traceHex( bh );
}
Получаем:


Код:

        0 : 0E 01 00 
        1 : 0E 03 00 90 80 70 60 
        2 : 0E 05 00 90 80 70 60 00 00 00 
       16 : 0E 21 00 90 80 70 60 00 00 00 
      255 : 0E 83 7F 00 90 80 70 60 00 00 
    65535 : 0E 87 FF 7F 00 90 80 70 60 00 
 16777215 : 0E 87 FF FF FF 00 90 80 70 60
Итак:
  1. 0E - (1 байт) маркер вектора uint. Правильно.
  2. длина вектора (U29) - как то на UINT29 не похоже
  3. 00 - (U8) vector-fixed-flag - правильно
  4. первый элемент вектора (uint - 4 байта) - правильно

По поводу длины вектора. Читаем спецификацию U29:
  • 0x00000000 - 0x0000007F : 0xxxxxxx
  • 0x00000080 - 0x00003FFF : 1xxxxxxx 0xxxxxxx
  • 0x00004000 - 0x001FFFFF : 1xxxxxxx 1xxxxxxx 0xxxxxxx
  • 0x00200000 - 0x3FFFFFFF : 1xxxxxxx 1xxxxxxx 1xxxxxxx xxxxxxxx
  • 0x40000000 - 0xFFFFFFFF : throw range exception

Получается что 0 должен быть 0, 1 должно быть 1, 2 должно быть 2
Имеем:
вместо нуля - 1
вместо 1 - 3
вместо 2 - 5.


Допустим, что спецификацию U29 надо понимать так, как написано в комменте на хабре:
; The first (low) bit is a flag with value 1.
; The remaining 1 to 28 significant bits are used to encode
; the length of the vector
Тогда получается, что 0, 1, 2, 16 - правильно.
А все что больше - неправильно.
Наприрмер для 255 (0xff): как ни крути 837F - 8 единиц подряд (0xff) не получается. Получается либо больше либо меньше.

Добавлено через 7 минут
0x83: 10000011
0x7f : 01111111
Как из этого получить 8 единиц?

Добавлено через 1 час 44 минуты
Ошибочка вышла. Работает.
Если взять readUInt29() из http://cvlib.googlecode.com/svn-hist...or/amf/AMF3.as и результат сдвинуть вправо на один бит, то работет.

Создать новую тему Ответ Часовой пояс GMT +4, время: 10:09.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 10:09.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.