Пакет | flash.net |
Класс | public class NetGroup |
Наследование | NetGroup EventDispatcher Object |
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10.1, AIR 2 |
-
Отслеживание качества обслуживания. Свойство
info
содержит объект NetGroupInfo, свойства которого предоставляют статистические данные о качестве обслуживания для этой группы. -
Публикация. Вызовите метод
post()
для рассылки сообщений ActionScript всем членам группы. -
Прямая маршрутизация. Вызовите методы
sendToNearest()
,sendToNeighbor()
иsendToAllNeighbors()
для отправки короткого сообщения с данными определенному члену одноранговой группы. Между отправителем и получателем не требуется прямое соединение. -
Репликация объектов. Вызовите метод
addHaveObjects()
,removeHaveObjects()
,addWantObjects()
,removeWantObjects()
,writeRequestedObject()
иdenyRequestedObject()
, чтобы разбить большой объем на части и продублировать их для всех узлов в одноранговой группе.
В клиентском классе NetGroup объект NetConnection отправляет следующие события:
- NetGroup.Connect.Success
- NetGroup.Connect.Failed
- NetGroup.Connect.Rejected
Свойство info.group
объекта события содержит ссылку на исходное событие (NetGroup). Объект NetGroup отправляет все остальные события. В серверном классе NetGroup объект NetGroup отправляет все события.
Сведения об использовании групп в одноранговой связи см. в статье Social Media Experiences with Flash Media and RTMFP (Социальная сеть с применением Flash Media и RTMFP, на английском языке) Тома Крча (Tom Krcha).
Сведения о технической стороне одноранговой связи см. в статье P2P on the Flash Platform with RTMFP (Одноранговая связь на платформе Flash с RTMFP, на английском языке) Мэтью Кауфмана (Matthew Kaufman), специалиста Adobe в области информационных технологий.
Связанные элементы API
flash.net.NetStream
Значения flash.events.NetStatusEvent info.code начиная с NetGroup.
Свойство | Определено | ||
---|---|---|---|
constructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта. | Object | ||
estimatedMemberCount : Number [только для чтения]
Указывает предполагаемое число членов группы, исходя из плотности локального сетевого окружения и равномерного распределения групповых адресов. | NetGroup | ||
info : NetGroupInfo [только для чтения]
Возвращает объект NetGroupInfo, свойства которого предоставляют статистику по качеству обслуживания, связанную с передачей данных между одноранговыми узлами RTMFP данного объекта NetGroup. | NetGroup | ||
localCoverageFrom : String [только для чтения]
Определяет начало диапазона групповых адресов, для которого этот узел является «ближайшим» и ответственным. | NetGroup | ||
localCoverageTo : String [только для чтения]
Определяет конец диапазона групповых адресов, для которого этот узел является «ближайшим» и ответственным. | NetGroup | ||
neighborCount : Number [только для чтения]
Указывает число членов группы, к которым непосредственно подключен данный узел. | NetGroup | ||
receiveMode : String
Определяет режим получения маршрутизации данного узла как одно из значений класса перечисления NetGroupReceiveMode. | NetGroup | ||
replicationStrategy : String
Определяет стратегию получения для репликации объектов. | NetGroup |
Метод | Определено | ||
---|---|---|---|
Создает объект NetGroup в указанном объекте NetConnection и добавляет его в группу, определенную в groupspec. | NetGroup | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Регистрирует объект прослушивателя события на объекте EventDispatcher для получения прослушивателем уведомления о событии. | EventDispatcher | ||
Добавляет объекты с индексами от startIndex до endIndex включительно в набор объектов, которые этот узел объявляет для соседей как объекты, для которых он отправляет запросы. | NetGroup | ||
Вручную добавляет запись, определяющую то, что peerID является членом группы. | NetGroup | ||
Вручную добавляет соседний узел путем немедленного подключения непосредственно к указанному peerID, который уже должен быть добавлен в эту группу. | NetGroup | ||
Добавляет объекты с индексами от startIndex до endIndex включительно в набор объектов, которые требуется получить. | NetGroup | ||
Отключите от группы и закройте этот объект NetGroup. | NetGroup | ||
Преобразует peerID в групповой адрес, пригодный для использования вместе с методом sendToNearest(). | NetGroup | ||
Отклоняет полученный в событии NetStatusEvent NetGroup.Replication.Request запрос на объект, объявленный ранее с помощью метода addHaveObjects(). | NetGroup | ||
Посылает событие в поток событий. | EventDispatcher | ||
Проверяет, имеет ли объект EventDispatcher прослушиватели, зарегистрированные для определенного типа события. | EventDispatcher | ||
Показывает, определено ли заданное свойство для объекта. | Object | ||
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра. | Object | ||
Отправляет сообщение всем членам группы. | NetGroup | ||
Показывает наличие заданного свойства и его перечисляемость. | Object | ||
Удаляет прослушиватель из объекта EventDispatcher. | EventDispatcher | ||
Удаляет объекты с индексами от startIndex до endIndex включительно из набора объектов, которые этот узел объявляет для соседей как объекты, для которых он отправляет запросы. | NetGroup | ||
Удаляет объекты с индексами от startIndex до endIndex включительно из набора объектов, которые требуется получить. | NetGroup | ||
Отправляет сообщение всем соседним узлам. | NetGroup | ||
Отправляет сообщение соседу (или локальному узлу), который находится ближе всего к указанному адресу группы. | NetGroup | ||
Отправляет сообщение соседнему узлу, определенному параметром sendMode. | NetGroup | ||
Задает доступность динамического свойства для операций цикла. | Object | ||
Возвращает строковое представление этого объекта, отформатированного в соответствии со стандартами, принятыми для данной локали. | Object | ||
Возвращает строковое представление заданного объекта. | Object | ||
Возвращает элементарное значение заданного объекта. | Object | ||
Проверяет, зарегистрирован ли прослушиватель события для указанного типа события с данным объектом EventDispatcher или любым его предшественником. | EventDispatcher | ||
Выполняет полученный объектом NetStatusEvent NetGroup.Replication.Request запрос на объект, объявленный ранее с помощью метода addHaveObjects(). | NetGroup |
Событие | Сводка | Определено | ||
---|---|---|---|---|
[многоадресное событие] Отправляется, когда проигрыватель Flash Player или приложение AIR перемещается в фокус операционной системы и становится активным. | EventDispatcher | |||
[многоадресное событие] Отправляется, когда проигрыватель Flash Player или приложение AIR теряет фокус системы и становится неактивным. | EventDispatcher | |||
Отправляется, когда объект NetGroup сообщает о своем состоянии или о случившейся ошибке. | NetGroup |
estimatedMemberCount | свойство |
estimatedMemberCount:Number
[только для чтения] Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10.1, AIR 2 |
Указывает предполагаемое число членов группы, исходя из плотности локального сетевого окружения и равномерного распределения групповых адресов.
Реализация
public function get estimatedMemberCount():Number
Связанные элементы API
info | свойство |
info:NetGroupInfo
[только для чтения] Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10.1, AIR 2 |
Возвращает объект NetGroupInfo, свойства которого предоставляют статистику по качеству обслуживания, связанную с передачей данных между одноранговыми узлами RTMFP данного объекта NetGroup.
Реализация
public function get info():NetGroupInfo
Связанные элементы API
localCoverageFrom | свойство |
localCoverageFrom:String
[только для чтения] Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10.1, AIR 2 |
Определяет начало диапазона групповых адресов, для которого этот узел является «ближайшим» и ответственным. Диапазон указывается по возрастанию вместе с кругом групповых адресов по модулю 2256.
Реализация
public function get localCoverageFrom():String
Связанные элементы API
localCoverageTo | свойство |
localCoverageTo:String
[только для чтения] Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10.1, AIR 2 |
Определяет конец диапазона групповых адресов, для которого этот узел является «ближайшим» и ответственным. Диапазон указывается по возрастанию вместе с кругом групповых адресов по модулю 2256.
Реализация
public function get localCoverageTo():String
Связанные элементы API
neighborCount | свойство |
receiveMode | свойство |
receiveMode:String
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10.1, AIR 2 |
Определяет режим получения маршрутизации данного узла как одно из значений класса перечисления NetGroupReceiveMode.
Реализация
public function get receiveMode():String
public function set receiveMode(value:String):void
Связанные элементы API
replicationStrategy | свойство |
replicationStrategy:String
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10.1, AIR 2 |
Определяет стратегию получения для репликации объектов. Выражен одним из значений, перечисленных в классе NetGroupReplicationStrategy.
Реализация
public function get replicationStrategy():String
public function set replicationStrategy(value:String):void
Связанные элементы API
NetGroup | () | Конструктор |
public function NetGroup(connection:NetConnection, groupspec:String)
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10.1, AIR 2 |
Создает объект NetGroup в указанном объекте NetConnection и добавляет его в группу, определенную в groupspec
.
В большинстве случаев groupspec
обеспечивает возможность использования исходящего сетевого соединения в локальной системе. Когда объект NetStream или NetGroup создается с использованием groupspec, Flash Player отображает диалоговое окно «Конфиденциальность». Это окно содержит запрос о том, может ли проигрыватель Flash Player использовать подключение для предоставления одноранговым узлам общего доступа к данным. Если пользователь нажимает кнопку «Разрешить для этого домена», это диалоговое окно не появляется при следующем подключении пользователя к этому приложению. Если пользователь не разрешает одноранговую связь, все связанные с ней функции группы (публикация, направленная маршрутизация, репликация объектов и многоадресная рассылка) выключаются. Если разрешение предоставляется, объект NetStatusEvent отправляется прослушивателю событий экземпляра NetConnection, при этом свойству code
объекта info
задается значение NetGroup.Connect.Success
. Если разрешение не предоставлено, свойству code
задается значение NetGroup.Connect.Rejected
. Пока не получено событие NetGroup.Connect.Success
, в ответ на любую попытку вызвать метод объекта NetGroup выдается исключение.
Примечание. Когда клиент подписывается на многоадресный поток с собственным IP-адресом, предупреждение системы безопасности не появляется.
Параметрыconnection:NetConnection — Объект NetConnection
| |
groupspec:String — Строка, определяющая одноранговую группу RTMFP, в которую требуется добавить объект, и включающая имя, возможности, ограничения и авторизации данного члена.
new NetGroup(myConnection, myGroupSpecifier.groupspecWithAuthorizations()); |
Выдает
ArgumentError — Экземпляр NetConnection не подключен.
| |
Error — Недопустимый groupspec.
|
Связанные элементы API
addHaveObjects | () | метод |
public function addHaveObjects(startIndex:Number, endIndex:Number):void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10.1, AIR 2 |
Добавляет объекты с индексами от startIndex
до endIndex
включительно в набор объектов, которые этот узел объявляет для соседей как объекты, для которых он отправляет запросы. По умолчанию набор доступных объектов (Have) пустой. Индексы должны быть целыми числами от 0 до 9007199254740992.
Дополнительные сведения о репликации объектов см. в разделе «Репликация объекта в группе» в Руководстве разработчика Flash Media Server.
Этот метод отправляет объект NetStatusEvent прослушивателю событий экземпляра NetGroup, при этом свойству code
объекта info
задается значение "NetGroup.Replication.Request"
.
ПРИМЕЧАНИЕ. Проверьте событие NetGroup.Neighbor.Connect
перед вызовом этого метода.
Параметры
startIndex:Number — Начало диапазона индексов объектов для добавления в набор доступных (Have).
| |
endIndex:Number — Конец диапазона индексов объектов для добавления в набор доступных (Have).
|
Выдает
RangeError — Число, передаваемое к этому методу, меньше 0 или больше 9007199254740992.
|
Связанные элементы API
addMemberHint | () | метод |
public function addMemberHint(peerID:String):Boolean
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10.1, AIR 2 |
Вручную добавляет запись, определяющую то, что peerID
является членом группы. Незамедлительная попытка подключения предпринимается, только если это необходимо для топологии.
Параметры
peerID:String — peerID, который необходимо добавить в набор потенциальных соседних узлов.
|
Boolean — TRUE обозначает успешное выполнение, FALSE — ошибку.
|
Связанные элементы API
addNeighbor | () | метод |
public function addNeighbor(peerID:String):Boolean
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10.1, AIR 2 |
Вручную добавляет соседний узел путем немедленного подключения непосредственно к указанному peerID
, который уже должен быть добавлен в эту группу. Это прямое подключение можно разорвать позднее, если оно не требуется для топологии.
Параметры
peerID:String — peerID, к которому следует немедленно подключиться.
|
Boolean — TRUE обозначает успешное выполнение, FALSE — ошибку.
|
Связанные элементы API
addWantObjects | () | метод |
public function addWantObjects(startIndex:Number, endIndex:Number):void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10.1, AIR 2 |
Добавляет объекты с индексами от startIndex
до endIndex
включительно в набор объектов, которые требуется получить. Индексы должны быть целыми числами от 0 до 9007199254740992. По умолчанию набор запрашиваемых объектов (Want) пустой.
Дополнительные сведения о репликации объектов см. в разделе «Репликация объекта в группе» в Руководстве разработчика Flash Media Server.
Этот метод отправляет объект NetStatusEvent прослушивателю событий экземпляра NetGroup, при этом свойству info.code
задается значение NetGroup.Replication.Fetch.SendNotify
. Вслед за этим событием отправляется событие NetGroup.Replication.Fetch.Failed
или NetGroup.Replication.Fetch.Result
.
ПРИМЕЧАНИЕ. Проверьте событие NetGroup.Neighbor.Connect
перед вызовом этого метода.
Параметры
startIndex:Number — Начало диапазона индексов объектов для добавления в набор запрашиваемых (Want).
| |
endIndex:Number — Конец диапазона индексов объектов для добавления в набор запрашиваемых (Want).
|
Выдает
RangeError — Число, передаваемое к этому методу, меньше 0 или больше 9007199254740992.
|
Связанные элементы API
close | () | метод |
public function close():void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10.1, AIR 2 |
Отключите от группы и закройте этот объект NetGroup. Этот объект NetGroup нельзя использовать после вызова этого метода.
convertPeerIDToGroupAddress | () | метод |
public function convertPeerIDToGroupAddress(peerID:String):String
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10.1, AIR 2 |
Преобразует peerID в групповой адрес, пригодный для использования вместе с методом sendToNearest()
.
Параметры
peerID:String — Преобразуемое значение peerID.
|
String — Групповой адрес для peerID.
|
Связанные элементы API
denyRequestedObject | () | метод |
public function denyRequestedObject(requestID:int):void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10.1, AIR 2 |
Отклоняет полученный в событии NetGroup.Replication.Request
класса NetStatusEvent запрос на объект, объявленный ранее с помощью метода addHaveObjects()
. Запрашивающая сторона может отправить еще одно требование, пока или если он не будет получен из набора доступных (Have).
Дополнительные сведения о репликации объектов см. в разделе «Репликация объекта в группе» в Руководстве разработчика Flash Media Server.
ПРИМЕЧАНИЕ. Проверьте событие NetGroup.Neighbor.Connect
перед вызовом этого метода.
Параметры
requestID:int — Идентификатор запроса, указанный в событии NetGroup.Replication.Request .
|
Связанные элементы API
post | () | метод |
public function post(message:Object):String
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10.1, AIR 2 |
Отправляет сообщение всем членам группы. Чтобы вызвать этот метод, в объекте groupspec, которое передается конструктору NetGroup, для свойства GroupSpecifier.postingEnabled
необходимо задать значение true
. Дополнительные сведения см. в разделе «Публикация сообщений в группе» в Руководстве разработчика Flash Media Server.
Все сообщения должны быть уникальными. Сообщения, идентичные опубликованным ранее, могут не отправляться. Используйте порядковый номер, чтобы сделать сообщение уникальными.
Доставка сообщений выполняется не по порядку. Доставка сообщений не гарантируется.
Сериализация сообщений выполняется в AMF. Сообщение может относиться к одному из следующих типов: объект, целое число, число или строка. Сообщение не может быть экземпляром MovieClip.
Этот метод отправляет объект NetStatusEvent прослушивателю событий экземпляра NetGroup, при этом свойству info.code
задается значение "NetGroup.Posting.Notify"
. Событие "NetGroup.Posting.Notify"
отправляется экземпляру NetGroup и клиента и сервера.
ПРИМЕЧАНИЕ. Проверьте событие NetGroup.Neighbor.Connect
перед вызовом этого метода.
Параметры
message:Object — Сообщение для отправки всем остальным членам группы.
|
String — Идентификатор messageID сообщения, если оно отправлено, или null в случае ошибки. Идентификатор messageID — это шестнадцатеричное представление хэш-функции SHA256 для необработанных байтов сериализации сообщения.
|
Связанные элементы API
Пример ( Использование этого примера )
Запустив это приложение, в текстовом поле ввода можно указать любое имя группы. Класс GroupSpecifier использует это имя (наряду с любыми заданными свойствами GroupSpecifier) для создания строки, которая является постоянно уникальным именем группы. Чтобы другой клиент мог подключиться к группе, он должен использовать то же самое имя группы. Например, если клиент A использует имя группы firstmesh, другие клиенты, которые хотят общаться с ним, также должны использовать имя группы firstmesh. Если клиент B использует имя группы kite, он сможет подключится, но при этом будет создана новая группы, и он не сможет общаться с клиентом A или другими членами группы firstmesh.
Для выполнения этого примера добавьте по одному компоненту Button, Label, TextInput и TextArea в библиотеку Flash Pro.
package { import flash.display.Sprite; import flash.events.TextEvent; import flash.events.MouseEvent; import flash.events.NetStatusEvent; import fl.events.ComponentEvent; import fl.controls.Label; import fl.controls.Button; import fl.controls.TextInput; import fl.controls.TextArea; import flash.text.TextFieldAutoSize; import flash.net.*; public class NetGroupPostExample extends Sprite{ private var connectButton:Button; private var disconnectButton:Button; private var groupNameText:TextInput; private var userNameText:TextInput; private var chatText:TextInput; private var statusLog:TextArea; private var groupLabel:Label; private var userLabel:Label; private var netConnection:NetConnection = null; private var netGroup:NetGroup = null; private var sequenceNumber:uint = 0; private var connected:Boolean = false; private var joinedGroup:Boolean = false; private const SERVER:String = "rtmfp://fms.example.com/someapp"; public function NetGroupPostExample() { DoUI(); } // Writes messages to the TextArea. private function StatusMessage(msg:Object):void{ statusLog.text += msg; statusLog.verticalScrollPosition = statusLog.textHeight; statusLog.validateNow(); } // Handles all NetStatusEvents for the NetConnection and the NetGroup. // This code includes cases it doesn't handle so you can see the cases // and their info objects for learning purposes. private function NetStatusHandler(e:NetStatusEvent):void{ StatusMessage(e.info.code + "\n"); switch(e.info.code){ case "NetConnection.Connect.Success": connectButton.enabled = false; disconnectButton.enabled = true; OnConnect(); break; case "NetConnection.Connect.Closed": OnDisconnect(); break; case "NetGroup.Connect.Success": // e.info.group OnNetGroupConnect(); break; case "NetGroup.Connect.Rejected": // e.info.group case "NetGroup.Connect.Failed": // e.info.group break; case "NetGroup.Posting.Notify": // e.info.message, e.info.messageID OnPosting(e.info.message); break; case "NetStream.MulticastStream.Reset": case "NetStream.Buffer.Full": break; case "NetGroup.SendTo.Notify": // e.info.message, e.info.from, e.info.fromLocal case "NetGroup.LocalCoverage.Notify": // case "NetGroup.Neighbor.Connect": // e.info.neighbor case "NetGroup.Neighbor.Disconnect": // e.info.neighbor case "NetGroup.MulticastStream.PublishNotify": // e.info.name case "NetGroup.MulticastStream.UnpublishNotify": // e.info.name case "NetGroup.Replication.Fetch.SendNotify": // e.info.index case "NetGroup.Replication.Fetch.Failed": // e.info.index case "NetGroup.Replication.Fetch.Result": // e.info.index, e.info.object case "NetGroup.Replication.Request": // e.info.index, e.info.requestID default: break; } } // Creates a NetConnection to Flash Media Server if the app isn't already connected // and if there's a group name in the TextInput field. private function DoConnect(e:MouseEvent):void{ if(!connected && (groupNameText.length > 0)){ StatusMessage("Connecting to \"" + SERVER + "\" ...\n"); netConnection = new NetConnection(); netConnection.addEventListener(NetStatusEvent.NET_STATUS, NetStatusHandler); // To connect to Flash Media Server, pass the server name. netConnection.connect(SERVER); } else { StatusMessage("Enter a group name"); } } // Called in the "NetConnection.Connect.Success" case in the NetStatusEvent handler. private function OnConnect():void{ StatusMessage("Connected\n"); connected = true; // Create a GroupSpecifier object to pass to the NetGroup constructor. // The GroupSpecifier determines the properties of the group var groupSpecifier:GroupSpecifier; groupSpecifier = new GroupSpecifier("aslrexample/" + groupNameText.text); groupSpecifier.postingEnabled = true; groupSpecifier.serverChannelEnabled = true; netGroup = new NetGroup(netConnection, groupSpecifier.groupspecWithAuthorizations()); netGroup.addEventListener(NetStatusEvent.NET_STATUS, NetStatusHandler); StatusMessage("Join \"" + groupSpecifier.groupspecWithAuthorizations() + "\"\n"); } private function OnNetGroupConnect():void{ joinedGroup = true; } private function DoDisconnect(e:MouseEvent):void{ if(netConnection){ netConnection.close(); } } private function OnDisconnect():void{ StatusMessage("Disconnected\n"); netConnection = null; netGroup = null; connected = false; joinedGroup = false; connectButton.enabled = true; disconnectButton.enabled = false; } private function ClearChatText():void{ chatText.text = ""; } // Called when you the chatText field has focus and you press Enter. private function DoPost(e:ComponentEvent):void{ if(joinedGroup){ var message:Object = new Object; message.user = userNameText.text; message.text = chatText.text; message.sequence = sequenceNumber++; message.sender = netConnection.nearID; netGroup.post(message); StatusMessage("==> " + chatText.text + "\n"); } else { StatusMessage("Click Connect before sending a chat message"); } ClearChatText(); } private function OnPosting(message:Object):void{ StatusMessage("<" + message.user + "> " + message.text + "\n"); } private function DoUI():void { groupLabel = new Label(); groupLabel.move(20, 10); groupLabel.autoSize = TextFieldAutoSize.LEFT groupLabel.text = "Group name:" addChild(groupLabel); groupNameText = new TextInput(); groupNameText.move(90, 10); groupNameText.text = "channel" + (int(Math.random() * 899) + 101); addChild(groupNameText); connectButton = new Button(); connectButton.addEventListener(MouseEvent.CLICK, DoConnect); connectButton.move(205, 10); connectButton.label = "Connect"; addChild(connectButton); disconnectButton = new Button(); disconnectButton.addEventListener(MouseEvent.CLICK, DoDisconnect); disconnectButton.move(310, 10); disconnectButton.label = "Disconnect"; disconnectButton.enabled = false; addChild(disconnectButton); statusLog = new TextArea(); statusLog.move(30, 38); statusLog.width = 360; statusLog.height = 215; statusLog.editable = false; addChild(statusLog); userLabel = new Label(); userLabel.move(20, 270); userLabel.autoSize = TextFieldAutoSize.LEFT userLabel.text = "User name:" addChild(userLabel); userNameText = new TextInput(); userNameText.move(80, 270); userNameText.text = "user " + int(Math.random() * 65536); addChild(userNameText); chatText = new TextInput(); chatText.addEventListener(ComponentEvent.ENTER, DoPost); chatText.move(185, 270); chatText.maxChars = 255; chatText.width = 215; addChild(chatText); } public function onPlayStatus(info:Object):void {} public function onMetaData(info:Object):void {} public function onCuePoint(info:Object):void {} public function onTextData(info:Object):void {} } }
removeHaveObjects | () | метод |
public function removeHaveObjects(startIndex:Number, endIndex:Number):void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10.1, AIR 2 |
Удаляет объекты с индексами от startIndex
до endIndex
включительно из набора объектов, которые этот узел объявляет для соседей как объекты, для которых он отправляет запросы. Индексы должны быть целыми числами от 0 до 9007199254740992.
Дополнительные сведения о репликации объектов см. в разделе «Репликация объекта в группе» в Руководстве разработчика Flash Media Server.
ПРИМЕЧАНИЕ. Проверьте событие NetGroup.Neighbor.Connect
перед вызовом этого метода.
Параметры
startIndex:Number — Начало диапазона индексов объектов для удаления из набора доступных (Have).
| |
endIndex:Number — Конец диапазона индексов объектов для удаления из набора доступных (Have).
|
Выдает
RangeError — Число, передаваемое к этому методу, меньше 0 или больше 9007199254740992.
|
Связанные элементы API
removeWantObjects | () | метод |
public function removeWantObjects(startIndex:Number, endIndex:Number):void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10.1, AIR 2 |
Удаляет объекты с индексами от startIndex
до endIndex
включительно из набора объектов, которые требуется получить. Индексы должны быть целыми числами от 0 до 9007199254740992.
Дополнительные сведения о репликации объектов см. в разделе «Репликация объекта в группе» в Руководстве разработчика Flash Media Server.
ПРИМЕЧАНИЕ. Проверьте событие NetGroup.Neighbor.Connect
перед вызовом этого метода.
Параметры
startIndex:Number — Начало диапазона индексов объектов для удаления из набора запрашиваемых (Want).
| |
endIndex:Number — Конец диапазона индексов объектов для удаления из набора запрашиваемых (Want).
|
Выдает
RangeError — Число, передаваемое к этому методу, меньше 0 или больше 9007199254740992.
|
Связанные элементы API
sendToAllNeighbors | () | метод |
public function sendToAllNeighbors(message:Object):String
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10.1, AIR 2 |
Отправляет сообщение всем соседним узлам. Возвращает NetGroupSendResult.SENT
, если выделен хотя бы один соседний узел.
Дополнительные сведения о передаче сообщений см. в разделе «Передача сообщений непосредственно одноранговому клиенту» в Руководстве разработчика Flash Media Server.
Когда узел получает сообщение, объект NetStatusEvent отправляется прослушивателю событий экземпляра NetGroup, при этом свойству code
объекта info
задается значение NetGroup.SendTo.Notify
.
ПРИМЕЧАНИЕ. Проверьте событие NetGroup.Neighbor.Connect
перед вызовом этого метода.
Параметры
message:Object — Сообщение для отправки.
|
String — Свойство класса перечисления NetGroupSendResult, которое указывает на успешное или неудачное выполнение отправки.
|
Связанные элементы API
sendToNearest | () | метод |
public function sendToNearest(message:Object, groupAddress:String):String
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10.1, AIR 2 |
Отправляет сообщение соседу (или локальному узлу), который находится ближе всего к указанному адресу группы. Принимает во внимание соседние узлы со всего круга. Возвращает NetGroupSendResult.SENT
, если сообщение успешно отправлено адресату.
Дополнительные сведения о передаче сообщений см. в разделе «Передача сообщений непосредственно одноранговому клиенту» в Руководстве разработчика Flash Media Server.
Когда узел получает сообщение, объект NetStatusEvent отправляется прослушивателю событий экземпляра NetGroup, при этом свойству code
объекта info
задается значение NetGroup.SendTo.Notify
.
ПРИМЕЧАНИЕ. Проверьте событие NetGroup.Neighbor.Connect
перед вызовом этого метода.
Параметры
message:Object — Сообщение для отправки.
| |
groupAddress:String — Групповой адрес, на который должно быть отправлено сообщение.
|
String — Свойство класса перечисления NetGroupSendResult, которое указывает на успешное или неудачное выполнение отправки.
|
Связанные элементы API
sendToNeighbor | () | метод |
public function sendToNeighbor(message:Object, sendMode:String):String
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10.1, AIR 2 |
Отправляет сообщение соседнему узлу, определенному параметром sendMode
. Возвращает NetGroupSendResult.SENT
, если сообщение успешно отправлено указанному адресату.
Дополнительные сведения о передаче сообщений см. в разделе «Передача сообщений непосредственно одноранговому клиенту» в Руководстве разработчика Flash Media Server.
Когда узел получает сообщение, объект NetStatusEvent отправляется прослушивателю событий экземпляра NetGroup, при этом свойству code
объекта info
задается значение NetGroup.SendTo.Notify
.
ПРИМЕЧАНИЕ. Проверьте событие NetGroup.Neighbor.Connect
перед вызовом этого метода.
Параметры
message:Object — Сообщение для отправки.
| |
sendMode:String — Свойство класса перечисления NetGroupSendMode, указывающее соседний узел, которому требуется отправить сообщение.
|
String — Свойство класса перечисления NetGroupSendResult, которое указывает на успешное или неудачное выполнение отправки.
|
Связанные элементы API
writeRequestedObject | () | метод |
public function writeRequestedObject(requestID:int, object:Object):void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10.1, AIR 2 |
Выполняет полученный объектом NetStatusEvent NetGroup.Replication.Request
запрос на объект, объявленный ранее с помощью метода addHaveObjects()
. Свойство object
может относиться к одному из следующих типов: объект, целое число, число или строка. Свойство object
не может быть экземпляром MovieClip.
Дополнительные сведения о репликации объектов см. в разделе «Репликация объекта в группе» в Руководстве разработчика Flash Media Server.
ПРИМЕЧАНИЕ. Проверьте событие NetGroup.Neighbor.Connect
перед вызовом этого метода.
Параметры
requestID:int — Идентификатор запроса, указанный в событии NetGroup.Replication.Request .
| |
object:Object — Объект с индексом, указанным в событии NetGroup.Replication.Request .
|
Связанные элементы API
netStatus | Событие |
flash.events.NetStatusEvent
свойство NetStatusEvent.type =
flash.events.NetStatusEvent.NET_STATUS
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 10.1 |
Отправляется, когда объект NetGroup сообщает о своем состоянии или о случившейся ошибке. Событие netStatus
содержит свойство info
. Свойство info
представляет собой информационный объект, который содержит определенные сведения о событии (например, количество успешных и неудачных попыток подключения).
type
для объекта события netStatus
.
Это событие имеет следующие свойства:
Свойство | Значение |
---|---|
bubbles | false |
cancelable | false ; поведение по умолчанию, подлежащее отмене, не определено. |
currentTarget | Объект, активно обрабатывающий объект Event с помощью прослушивателя событий. |
info | Объект со свойствами, описывающими состояние объекта или условие ошибки. |
target | Объект NetConnection или NetStream, сообщающий свое состояние. |
Связанные элементы API
Запустив это приложение, в текстовом поле ввода можно указать любое имя группы. Класс GroupSpecifier использует это имя (наряду с любыми заданными свойствами GroupSpecifier) для создания строки, которая является постоянно уникальным именем группы. Чтобы другой клиент мог подключиться к группе, он должен использовать то же самое имя группы. Например, если клиент A использует имя группы firstmesh, другие клиенты, которые хотят общаться с ним, также должны использовать имя группы firstmesh. Если клиент B использует имя группы kite, он сможет подключится, но при этом будет создана новая группы, и он не сможет общаться с клиентом A или другими членами группы firstmesh.
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="100%" height="100%" applicationComplete="OnApplicationComplete()"> <mx:Script> <![CDATA[ private var netConnection:NetConnection = null; private var netStream:NetStream = null; private var netGroup:NetGroup = null; private var video:Video = null; private var sequenceNumber:uint = 0; private var resizeTimer:Timer = null; private const SERVER:String = "rtmfp://fms.example.com/someapp"; [Bindable] private var connected:Boolean = false; [Bindable] private var joinedGroup:Boolean = false; private function OnApplicationComplete():void { userName.text = "user " + int(Math.random() * 65536); groupName.text = "channel" + (int(Math.random() * 899) + 101); resizeTimer = new Timer(2000.0); resizeTimer.addEventListener(TimerEvent.TIMER, DoResizeVideo); resizeTimer.start(); } private function StatusMessage(msg:Object):void { statusLog.text += msg; statusLog.verticalScrollPosition = statusLog.textHeight; statusLog.validateNow(); } private function NetStatusHandler(e:NetStatusEvent):void { StatusMessage(e.info.code); switch(e.info.code) { case "NetConnection.Connect.Success": OnConnect(); break; case "NetConnection.Connect.Closed": case "NetConnection.Connect.Failed": case "NetConnection.Connect.Rejected": case "NetConnection.Connect.AppShutdown": case "NetConnection.Connect.InvalidApp": OnDisconnect(); break; case "NetStream.Connect.Success": // e.info.stream OnNetStreamConnect(); break; case "NetStream.Connect.Rejected": // e.info.stream case "NetStream.Connect.Failed": // e.info.stream DoDisconnect(); break; case "NetGroup.Connect.Success": // e.info.group OnNetGroupConnect(); break; case "NetGroup.Connect.Rejected": // e.info.group case "NetGroup.Connect.Failed": // e.info.group DoDisconnect(); break; case "NetGroup.Posting.Notify": // e.info.message, e.info.messageID OnPosting(e.info.message); break; case "NetStream.MulticastStream.Reset": case "NetStream.Buffer.Full": DoResizeVideo(); break; case "NetGroup.SendTo.Notify": // e.info.message, e.info.from, e.info.fromLocal case "NetGroup.LocalCoverage.Notify": // case "NetGroup.Neighbor.Connect": // e.info.neighbor case "NetGroup.Neighbor.Disconnect": // e.info.neighbor case "NetGroup.MulticastStream.PublishNotify": // e.info.name case "NetGroup.MulticastStream.UnpublishNotify": // e.info.name case "NetGroup.Replication.Fetch.SendNotify": // e.info.index case "NetGroup.Replication.Fetch.Failed": // e.info.index case "NetGroup.Replication.Fetch.Result": // e.info.index, e.info.object case "NetGroup.Replication.Request": // e.info.index, e.info.requestID default: break; } } private function DoConnect():void { StatusMessage("Connecting to \"" + SERVER + "\" ...\n"); netConnection = new NetConnection(); netConnection.addEventListener(NetStatusEvent.NET_STATUS, NetStatusHandler); netConnection.connect(SERVER); } private function OnConnect():void { var groupSpecifier:GroupSpecifier; StatusMessage("Connected\n"); connected = true; groupSpecifier = new GroupSpecifier("max2009lab/" + groupName.text); groupSpecifier.multicastEnabled = true; groupSpecifier.postingEnabled = true; groupSpecifier.serverChannelEnabled = true; netStream = new NetStream(netConnection, groupSpecifier.groupspecWithAuthorizations()); netStream.addEventListener(NetStatusEvent.NET_STATUS, NetStatusHandler); netGroup = new NetGroup(netConnection, groupSpecifier.groupspecWithAuthorizations()); netGroup.addEventListener(NetStatusEvent.NET_STATUS, NetStatusHandler); StatusMessage("Join \"" + groupSpecifier.groupspecWithAuthorizations() + "\"\n"); } private function OnNetStreamConnect():void { netStream.client = this; var mic:Microphone = Microphone.getMicrophone(); if(mic) { mic.codec = SoundCodec.SPEEX; mic.setSilenceLevel(0); netStream.attachAudio(mic); StatusMessage("got microphone\n"); } var camera:Camera = Camera.getCamera(); if(camera) { camera.setMode(320, 240, 10); camera.setQuality(30000, 0); camera.setKeyFrameInterval(15); videoDisplay.attachCamera(camera); videoDisplay.maintainAspectRatio = true; netStream.attachCamera(camera); StatusMessage("got camera\n"); } netStream.publish("stream"); } private function OnNetGroupConnect():void { joinedGroup = true; } private function DoDisconnect():void { if(netConnection) netConnection.close(); videoDisplay.attachCamera(null); } private function OnDisconnect():void { StatusMessage("Disconnected\n"); netConnection = null; netStream = null; netGroup = null; connected = false; joinedGroup = false; } private function ClearChatText():void { chatText.text = ""; } private function DoPost():void { var message:Object = new Object; message.user = userName.text; message.text = chatText.text; message.sequence = sequenceNumber++; message.sender = netConnection.nearID; netGroup.post(message); StatusMessage("==> " + chatText.text + "\n"); chatText.callLater(ClearChatText); } private function OnPosting(message:Object):void { StatusMessage("<" + message.user + "> " + message.text + "\n"); } private function DoResizeVideo(ignored:* = null):void { if(video) { if( (0 == video.videoHeight) || (0 == video.videoWidth) ) { video.height = videoDisplay.height; video.width = videoDisplay.width; video.x = 0; video.y = 0; } else { var videoAspect:Number = Number(video.videoWidth) / Number(video.videoHeight); var displayAspect:Number = Number(videoDisplay.width) / Number(videoDisplay.height); var adjustFactor:Number; if(videoAspect >= displayAspect) // video is wider than display { adjustFactor = Number(video.videoWidth) / Number(videoDisplay.width); video.width = videoDisplay.width; video.height = int(Number(video.videoHeight) / adjustFactor); video.x = 0; video.y = int((videoDisplay.height - video.height) / 2); } else { adjustFactor = Number(video.videoHeight) / Number(videoDisplay.height); video.height = videoDisplay.height; video.width = int(Number(video.videoWidth) / adjustFactor); video.x = int((videoDisplay.width - video.width) / 2); video.y = 0; } } } } public function onPlayStatus(info:Object):void {} public function onMetaData(info:Object):void {} public function onCuePoint(info:Object):void {} public function onTextData(info:Object):void {} public function ValidateConnectAllowed(isConnected:Boolean, groupNameText:String):Boolean { return (!isConnected) && (groupNameText.length > 0); } ]]> </mx:Script> <mx:VBox top="10" right="10" left="10" bottom="10" verticalGap="6"> <mx:HBox width="100%"> <mx:Text text="Group:"/> <mx:TextInput id="groupName" width="100%" text="default" enabled="{!connected}"/> <mx:Button label="Connect" click="DoConnect()" enabled="{ValidateConnectAllowed(connected, groupName.text)}" /> <mx:Button label="Disconnect" click="DoDisconnect()" enabled="{connected}" /> </mx:HBox> <mx:VideoDisplay id="videoDisplay" width="320" height="240" resize="DoResizeVideo()"/> <mx:TextArea id="statusLog" width="100%" height="100%"/> <mx:HBox width="100%"> <mx:TextInput id="userName" width="160" /> <mx:TextInput id="chatText" width="100%" enabled="{joinedGroup}" enter="DoPost()"/> </mx:HBox> </mx:VBox> </mx:Application>
Tue Jun 12 2018, 11:34 AM Z