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

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

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

Полезные ссылки
Случайные записи
  • 22.03.2011">Руководство по actionscript. часть 2, стр. 005
  • 14.03.2011">Руководство по actionscript. часть 3, стр. 071
  • 19.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.14
  • 01.03.2011">Руководство по actionscript. часть 5, стр. 115
  • 02.03.2011">Руководство по actionscript. часть 5, стр. 103
  • 08.03.2011">Руководство по actionscript. часть 4, стр. 077
  • 03.03.2011">Руководство по actionscript. часть 5, стр. 067
  • 05.08.2011">Вентиляция помещения необходима для здоровья и продуктивности работников
  • 24.02.2011">Руководство по actionscript. часть 7, стр. 003
  • 17.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.112
  • 27.02.2011">Руководство по actionscript. часть 6, стр. 027
  • 11.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.37
  • 28.02.2011">Руководство по actionscript. часть 5, стр. 137
  • 02.03.2011">Руководство по actionscript. часть 5, стр. 089
  • 12.03.2011">Руководство по actionscript. часть 3, стр. 134
Опрос

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

View Results

Loading ... Loading ...