Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Ошибки при пересоединении сокета. (http://www.flasher.ru/forum/showthread.php?t=198030)

C4Grey 19.04.2013 05:55

О событии CLOSE - имел в виду вот так:
Код AS3:

if(sender && sender.connected)
{
    sender.addEventListener(Event.CLOSE, OnSenderClose);
    sender.close();
}
...
private function OnSenderClose(e:Event):void
{
    disposeCurrentSocket();
    newSenderSocket();
}

А то получается что все слушатели событий удаляются до отключения активного сокета - может туда какая ошибка приходит...

Цитата:

try-catch ничего не показал в трейсе.
trace - не лучший способ отладки, стоит воспользоваться дебагером

P.S.
Еще буфер нужно очищать, как советует chamele0n

caseyryan 19.04.2013 07:41

Цитата:

trace - не лучший способ отладки, стоит воспользоваться дебагером
Чем в данном случае дебагер лучше трейса?

iflamberg 19.04.2013 13:41

Код AS3:

try
{
  socket.connect();
}
catch(e0:IOError)
{
}
catch(e1:SecurityError)
{
}

Мне интересно, что вы там собираетесь ловить catch'ем. Там событие ошибки возникает, а не ошибка выкидывается.

MOHCTEP 19.04.2013 15:02

2 C4Grey Как вы считаете, OnSenderClose в вашем коде когда нибудь сработает?
Писал ведь уже, что сокет отключается вручную, перед полным его диспозом. И чистка, если flush() подразумевается, тоже делается. Разве что проверю еще буфер, перед удалением сокета.
2 iflamberg Вы абсолютно правы.
Повторюсь, проблема возникает, когда какой либо из коннектов (профилей) сгенерит событие ошибки Error #2031: Socket Error, после этого все следующие коннекты генерят эту же ошибку. А вот когда луна в нужной четверти и связь исправна, то даже сокет обновлять нет необходимости. Единственный справляется отменно.

C4Grey 19.04.2013 15:09

Цитата:

Сообщение от caseyryan (Сообщение 1130434)
Чем в данном случае дебагер лучше трейса?

Тем, что можно посмотреть состояние экземпляра класса Socket...для примера, вот так:
http://flashgameblogs.ru/uploads/ima.../27/a53d57.jpg
Впрочем, сам с удовольствием использую Flash Console наравне с дебагером - любое средство пригодится в определенных условиях.

Цитата:

Сообщение от iflamberg (Сообщение 1130460)
Мне интересно, что вы там собираетесь ловить catch'ем. Там событие ошибки возникает, а не ошибка выкидывается.

Ну а вдруг :)

Добавлено через 29 минут
Цитата:

Сообщение от MOHCTEP (Сообщение 1130477)
2 C4Grey Как вы считаете, OnSenderClose в вашем коде когда нибудь сработает?
Писал ведь уже, что сокет отключается вручную, перед полным его диспозом. И чистка, если flush() подразумевается, тоже делается. Разве что проверю еще буфер, перед удалением сокета.

извини, забыл что это событие вызвается только при отключении от сервера. В одной игршке делал переподключение к серверу - там сокеты были нужны только во время самого геймплея, клиенты часто отключались-подключались, и таких пробелм не видел, потому и советовал максимально обвешаться проверками, защитный рефлекс при столкновении с неведомым :).
P.S.
Возможно, это еще один глупый совет, но попробуй подключится по таймеру через секунд 5 - на одном форуме встречал топик с похожей проблемой.

MOHCTEP 19.04.2013 22:04

C4Grey Спасибо! Я сейчас уже вполне в состоянии воспринимать любые советы.
Никак не поддается крепость вражья!))

Добавлено через 25 часов 6 минут
:) Спасибо всем! Проблема ликвидирована.

C4Grey 22.04.2013 15:59

Напиши, пожалуйста, в чем она заключалась, если не сложно.

MOHCTEP 22.04.2013 20:29

Почему-то сокет слал событие Error #2031 дважды, с промежутком в несколько миллисекунд. По первому событию переключался профиль, ловил дубль, снова переключался и софтинка сходила с ума. ))
Эти события тащат с собою св-во text, с описанием ошибки и текущим хостом. Вот по этому самому хосту я и отфильтровал повторы в обработчике и шарманка поехала.


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

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