Руководство по actionscript. часть 6, стр. 051

Создание и подключение к сокету

Для установки сокетного соединения и управления им мы используем экземпляр класса Socket, который присваиваем закрытой переменной socket:

socket = new Socket( );

Чтобы подключиться к сокету, мы используем метод экземпляра connect ( ) класса Socket. Однако поскольку сокетные соединения потенциально могут генерировать ошибки безопасности и ошибки ввода/вывода, мы помещаем вызов метода connect ( ) в блок try/catch:

try {

socket. connectC’localhost», 3000); } catch (e:Error) { out(«Connection problem!\n»); out(e. message);

}

Помещение байтов в буфер

Как мы уже знаем, при получении новых данных через сокет среда Flash выполняет диспетчеризацию события ProgressEvent. SOCKET_DATA. Получателем данного события является объект Socket, получивший эти данные. Таким образом, чтобы получать уведомления о появлении новых данных, мы регистрируем в объекте socket приемник для события ProgressEvent. SOCKET_DATA, как показано в следующем коде:

socket. addEventLi stener(ProgressEvent. SOCKET_DATA. socketDataLi stener);

Всякий раз, когда возникает событие ProgressEvent. SOCKET_DATA, вызывается метод экземпляра socketDataListener ( ) класса DisplayAssetLoader. Внутри метода s о eke t Da taLi stener ( ) переменная экземпляра byte s Avail able класса Socket обозначает количество байтов в сокете, доступных для чтения на настоящий момент. Метод socketDataListener ( ) добавляет новые полученные данные в объект ByteArray, на который ссылается переменная buffer. Чтобы прочитать новые данные и сохранить их в объекте buffer, мы используем метод экземпляра readBytes ( ) класса Socket, который принимает следующий общий вид:

o6beKTSocket. rea6Bytes(6aiiTbi, смещение, длина)

Здесь объектБоскеЬ — это объект Socket, из которого будут прочитаны байты, байты — объект ByteArray, в который будут записаны байты, смещение — позиция внутри объекта байты, с которой начнется запись, а длина — количество байтов, которое будет прочитано из сокета. В нашем случае мы хотим прочитать все байты из сокета и сохранить их в объекте buffer, начиная с конца объекта buffer. Следовательно, мы используем такой код:

socket. readBytes(buffer, buffer. length, socket. bytesAvai1able);

Рассмотрим полный листинг кода для метода socketDataListener ( ):

private function socketDataListener (e:ProgressEvent):void { out(«New socket data arrived.»);

socket. readBytes(buffer, buffer. length, socket. bytesAvai1able);

}

Создание отображаемого элемента из загруженных байтов

Как только все байты для элемента будут получены, мы можем использовать метод экземпляра loadBytes ( ) класса Loader для создания из этих байтов экземпляра класса DisplayObject языка ActionScript. Напомним, что сервер FileSender сообщает о завершении передачи данных в полном объеме путем простого закрытия сокетного соединения. Поэтому мы помещаем код, создающий наш экземпляр класса DisplayOb j ect («объект элемента»), в приемник события Event. CLOSE. Чтобы зарегистрировать приемник для события Event. CLOSE в объекте socket, мы используем следующий код:

socket. addEventLi stener(Event. CLOSE, closeLi stener);

Вфункции closeListener ( ) перед созданием экземпляра класса DisplayObject мы сначала проверяем, был ли получен байт «завершение передачи» (ASCII-код 4) от сервера. Напомним, что сервер отправляет байт «завершение передачи» в качестве последнего байта потока данных. Чтобы получить этот байт, мы используем следующий код:

buffer. position = buffer. length — 1;

var lastByte:int = buffer. readUnsignedByte( );

Если байт «завершение передачи» отсутствует, бинарные данные элемента были получены не полностью, и поэтому функция-приемник завершает свое выполнение:

if (lastByte!= DisplayAssetLoader. EOT) { return;

Если байт «завершение передачи» был получен, мы создаем объект элемента с помощью метода loadBytes ( ). Тем не менее перед передачей байтов элемента в метод loadBytes ( ) мы должны сначала удалить байт «завершение передачи» из буфера, как показано в следующем коде:

buffer. length = buffer. length — 1:

Теперь, имея на руках байты элемента, мы можем создать объект элемента:

loader = new Loader( ): 1oader.1oadBytes(buffer):

После завершения выполнения предыдущего кода запускается процесс генерации объекта элемента, однако сам объект элемента пока недоступен. Как и в случае с методом экземпляра load ( ) класса Loader, если попытаться обратиться к объекту элемента через переменную loader. content сразу после вызова метода loadBytes ( ), будет возвращено значение null. Таким образом, перед тем как обратиться к объекту элемента, мы должны дождаться возникновения события Event. INIT:

loader. contentLoaderInfo. addEventListener(Event. INIT.

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

Оставить комментарий

Вы должны авторизоваться для отправки комментария.

Полезные ссылки
Случайные записи
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 060
  • 13.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.85
  • 18.08.2012">Apple назвала условия урегулирования министерства юстиции несправедливыми
  • 26.07.2010">Функциональная навигация
  • 08.03.2011">Руководство по actionscript. часть 4, стр. 096
  • 02.03.2011">Руководство по actionscript. часть 5, стр. 099
  • 05.11.2012">Gmail стал самым популярным почтовым сервисом в мире
  • 28.01.2010">Новая функция в твиттере — локальные тренды (local trends)
  • 19.08.2013">Android с новыми возможностями на Chuwi V88
  • 26.02.2011">Руководство по actionscript. часть 6, стр. 059
  • 19.06.2012">Google: правительство США на 103% увеличило запросы на удаление контента
  • 22.01.2011">Руководство по actionscript. часть 1, стр. 123
  • 06.03.2011">Руководство по actionscript. часть 4, стр. 145
  • 11.07.2010">Работаем над идеей
  • 04.03.2011">Руководство по actionscript. часть 5, стр. 053
Опрос

Какие цвета вы предпочитаете?

View Results

Loading ... Loading ...