Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   SWFLoader, при повторной загрузке AVM1 теряются переменные запроса (http://www.flasher.ru/forum/showthread.php?t=131908)

incorp 30.10.2009 21:32

SWFLoader, при повторной загрузке AVM1 теряются переменные запроса
 
Сразу к сути, вот код во флексовом приложении, оставил только то что показалось важным, этот код создает SWFLoader, и автолоадом подгружает приложение на as2, в переменных запроса идут инициализационные переменные для подгружаемого приложения.
Код AS3:

                private function doLoadComponent( component:ComponentBean, params:Object ) : void
                {
                        component.setIsLoading( true );
 
                        loader = new SWFLoader();
 
                        loader_target = target;
                        target.addChild( loader );
                        component.setLevel( loader );
                        if(component.getName()!=loaded_name)
                        hideComponent( component.getName() );
 
                        var users_bean:String = "";
                        for each (var i:TableUserBean in users) users_bean += i.serializeForHttpReq();
 
                        var request:URLRequest = new URLRequest( component.getPath() + component.getName() +'.swf?v=' + getTimer() +
                        "&SFServer="+server+"&SFSPort="+String(port)+"&tempLog="+login+"&tempPas="+pass+"&gameName="+component.getName()+
                        "&table_room_id="+table_room_id+"&table_id="+table_id+"&place="+place+"&users="+users_bean);
 
                        if ( params ) request.data = params;
                        loader.addEventListener( Event.COMPLETE, onComponentLoaded );
                        loader.addEventListener( Event.UNLOAD, onUnloadComponent );
                        loader.source = request.url;
                        }
                }
 
                private function onUnloadComponent( event:* ) : void { trace("UNLOAD"); }
 
                public function exitFromGame():void{ loader.unloadAndStop(true); }

А в чем же проблема? А проблема вот в чем - при первой подгрузке мы получаем наши переменные(все работает), при повторной в той же сессии - нет. При это я так и не смог для себя дать объяснение некоторым фактам, в клиентском приложении пишем:
Код AS3:

static private var temp = 1;
 
private function set_init_variables()
{
                trace("***Мы здесь были " + temp + " раз");
                temp++;
}

в трейсах ловим:
***Мы здесь были 1 раз //все переменные появились в руте загруженого свф, как им и было сказано
UNLOAD // это анлоад зафиксирован во флексовом приложении
***Мы здесь были 2 раз //переменные в руте не определены, хотя запрос отработал, мы зашли в приложение.
Пока единственным объяснением я для себя вижу пятницу и опухший мозг к конецу недели, если у кого нибудь есть более здравые мысли - поделитесь. Премного благодарен:)
Да, забыл уточнить exitFromGame() вызывается по нажатии кнопки через локал конекшн в ас2 приложении.

wvxvw 30.10.2009 21:41

Коннекш нужно обязательно закрывать перед выходом, иначе ничего не выгрузится.

incorp 31.10.2009 14:24

на стороне флексового приложения я пробовал закрыть локал коннекшн, использовал команду close(). никакой разницы в результате не было, тем более что срабавтывает событие Event.UNLOAD - значит по идее выгрузка как бы произошла.

wvxvw 01.11.2009 02:20

Не, событие вообще ни о чем не говорит. Когда Loader вызывает unload() он просто удаляет чилда из списка отображения, но если сообщение не закрыто "до конца", то чилд так и зависнет в памяти.
Но, есть еще и такое подозрение, что SWFLoader может отыскивать таких "потеряных детей", и потом их загружать повторно, если они вдруг обнаружаться после выгрузки. Я в его код не смотрел, но например загрузчик модулей так работает.

incorp 02.11.2009 01:20

Да, это похоже на правду, я вобщем тоже думал в этом направлении. Но как же с этим бороться, хотя бы теоретически? я так понимаю команду "абсолютно полный анлоад" я вряд ли найду :)

wvxvw 02.11.2009 01:46

Ну так только общие пожелания - поищите, может где-то в AS3 осталась необнуленная ссылка / неубитый слушатель привязаный к этому ребенку... Но вообще, иногда бывает впринципе невозможно выгрузить чужую флешку... особенное если там какие-нибудь setInterval'ы крутятся, тот же ЛК и тому подобные...

incorp 02.11.2009 12:50

ок, спасибо, будем искать..


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

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