Руководство по 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

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

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

Полезные ссылки
Случайные записи
  • 26.07.2010">Функциональная навигация
  • 13.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.92
  • 19.11.2013">Паркетная доска: достоинства и недостатки
  • 11.11.2012">Фотокнига от Принт-а-Тет
  • 14.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.71
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.119
  • 13.03.2011">Руководство по actionscript. часть 3, стр. 104
  • 18.03.2011">Руководство по actionscript. часть 2, стр. 136
  • 23.02.2011">Руководство по actionscript. часть 7, стр. 037
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 068
  • 23.02.2011">Руководство по actionscript. часть 7, стр. 019
  • 19.06.2012">Google: правительство США на 103% увеличило запросы на удаление контента
  • 17.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.1
  • 26.02.2011">Руководство по actionscript. часть 6, стр. 059
  • 03.03.2011">Руководство по actionscript. часть 5, стр. 064
Опрос

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

View Results

Loading ... Loading ...