Прежде всего: это не другой вопрос о том, как загрузить файл политики.
У меня есть приложение в разработке, которое подключается к серверу сокетов, получает файл политики и работает просто отлично. Однако, когда сервер сокетов по какой-либо причине не работает, мне нужно изящно использовать альтернативный метод получения сообщений от сервера (в основном опрос).
Это не проблема, кроме одного:
Error: Request for resource at xmlsocket://[ip]:4770 by requestor from http://[ip]/cooking/Client.swf has failed because the server cannot be reached.
Кажется, нет способа поймать это. У меня есть слушатели событий на моем сокете:
addEventListener(Event.CLOSE, closeHandler);
addEventListener(Event.CONNECT, connectHandler);
addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
SecurityErrorEvent - это то, что, как вы думаете, срабатывает, но это не так. Документы говорят, что это происходит по следующим причинам:
- Локальные ненадежные SWF-файлы могут не взаимодействовать с Интернетом. Вы можете обойти это ограничение, переклассифицировав файл как локальный с сетевым подключением или как доверенный.
- Вы не можете указать порт сокета
выше 65535.
- На странице HTML, которая содержит
SWF-контент, разрешить сеть
параметр объекта и встраивать
для тегов установлено значение "none".
Так что ни один из них не применим. Похоже, что я действительно хочу поймать, это сбой загрузки файла политики, но даже выполнение явного Security.loadPolicyFile () не поможет, поскольку эта загрузка откладывается до первого запроса сокета И не запускает никаких событий .
Для полноты я также окружил вызов connect () попыткой {} catch (e: *) {}, безрезультатно.
Должен быть способ отсортировать это. Есть идеи? Мне просто нужен способ узнать, когда произошел сбой соединения из-за проблем с сетью, и попробовать альтернативный путь.
РЕДАКТИРОВАТЬ: Несмотря на мои предыдущие тесты и документы, кажется, SecurityErrorEvent срабатывает - только он делает это примерно через 20 секунд после сбоя загрузки, так что это не очевидно. Я думаю, это так же быстро, как я собираюсь получить от Flash.