![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Feb 2009
Сообщений: 141
|
private var __server:NetConnection = new NetConnection(); private var __responder:Responder; public static const SERVER_ANSVER:String = "SERVER_ANSVER"; public static const ERROR:String = "ERROR"; public function AMFPHPServer() { __server.addEventListener(NetStatusEvent.NET_STATUS, errorHandler); __server.addEventListener(AsyncErrorEvent.ASYNC_ERROR, errorHandler); __server.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); __server.addEventListener(SecurityErrorEvent.SECURITY_ERROR, errorHandler); } public function call(service:String, parametr:*=null):void { __responder = new Responder(onResult); __server.connect(GlobalVars.URL_PREFIX+GlobalVars.URL_SERVER); __server.call(service, __responder, parametr); } private function onResult(value:*=null):void { __server.removeEventListener(NetStatusEvent.NET_STATUS, errorHandler); __server.removeEventListener(AsyncErrorEvent.ASYNC_ERROR, errorHandler); __server.removeEventListener(IOErrorEvent.IO_ERROR, errorHandler); __server.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, errorHandler); this.dispatchEvent(new AMFPHPEvent(SERVER_ANSVER, value)); __server.close(); __server = null; } private function errorHandler(e:Object):void { __server.removeEventListener(NetStatusEvent.NET_STATUS, errorHandler); __server.removeEventListener(AsyncErrorEvent.ASYNC_ERROR, errorHandler); __server.removeEventListener(IOErrorEvent.IO_ERROR, errorHandler); __server.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, errorHandler); __server.close(); __server = null; } P.S Подозреваю, что лик образовывается из-за не отработанного Responder, который и ликует весь класс. Если в респондер добавить вторую функцию, которая в теории выполняется при ошибке сервера, то ничего не меняется, вторая функция вобще не срабатывает. У кого-нибудь есть идеи? Добавлено через 28 часов 52 минуты Ну неужели никто никогда не использовал NetConnection? Добавлено через 70 часов 24 минуты Ау-у! |
|
|||||
|
А если делать вызов без респондера?
Подвисает в памяти объект __server ?
__________________
Сам себе репортер |
|
|||||
|
Регистрация: Feb 2009
Сообщений: 141
|
Цитата:
В памяти подвисают экземпляры этого класса. Если без респондера, то как отписываться от событий? Решил вопрос способом, который мне не очень нравится, но работает. Перед звонком на сервер, по таймауту вызываю функцию, которая отписывается от события, которое ждет ответа сервера и далее уже либо звоним еще раз, либо выдаем сообщение, что сервер не отвечает, если же сервер благополучно ответил очищаем установленный таймут. Хоть и убил двух зайцев: нет ликов и есть обработка ошибок/недоступности сервера, мне не нравится подход тем, что нельзя избавиться от лика, без обработки ошибки/недоступности сервера. Вот, т.е хотелось бы, чтобы эту функцию брал не себя не способный ни на что в данном случае подлец респондер, а не писать к нему заплатки. Добавлено через 11 минут Только что осенило, что малость протупил: Диспатчим наверх событие об ошибке сервера, либо по таймауту, либо по сработавшей errorHandler, а наверху подписавшись на это событие отписываемся от всего, чего нужно. Тогда не придется обрабатывать ошибку/недоступность в каждом случае таймаутом при работе с экземпляром, т.к. это будет внутри класса и таким образом наверху я так же смогу отписаться от события ожидающего ответа сервера и ликов это вызывать не будет. Ведь именно из-за этого события экземпляр оставался в памяти. А респондер получается отрабатывает как нужно, если ошибка на сервере. Но вот если он вобще не отвечает... юзать таймаут внутри. Сколько воды утекло, до сих пор юзаю этот класс с кривыми заплатками, а только сейчас осенило этой, удивляющей своей простотой, мыслью. |
![]() |
![]() |
Часовой пояс GMT +4, время: 09:43. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|