Pakiet | flash.net |
Klasa | public class NetGroup |
Dziedziczenie | NetGroup EventDispatcher Object |
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10.1, AIR 2 |
-
Monitorowanie jakości usług. Właściwość
info
zawiera obiekt NetGroupInfo, którego właściwości udostępniają dane statystyczne na temat jakości usług (QoS) w tej grupie. -
Ogłaszanie. Wywołując metodę
post()
, można rozgłaszać komunikaty ActionScript wśród wszystkich elementów grupy. -
Routing ukierunkowany Metody
sendToNearest()
,sendToNeighbor()
isendToAllNeighbors()
umożliwiają wysłanie krótkiego komunikatu z danymi do konkretnego elementu grupy P2P. Węzeł źródłowy nie musi być bezpośrednio połączony z docelowym. -
Replikacja obiektów. Metody
addHaveObjects()
,removeHaveObjects()
,addWantObjects()
,removeWantObjects()
,writeRequestedObject()
idenyRequestedObject()
umożliwiają rozbicie dużych zbiorów danych na mniejsze fragmenty i replikowanie ich do wszystkich węzłów w grupie P2P.
W klienckiej klasie NetGroup obiekt NetConnection wywołuje następujące zdarzenia:
- NetGroup.Connect.Success
- NetGroup.Connect.Failed
- NetGroup.Connect.Rejected
Właściwość info.group
obiektu zdarzenia zawiera odwołanie do źródła zdarzenia (NetGroup). Klasa NetGroup wywołuje wszystkie pozostałe zdarzenia. W serwerowej klasie NetGroup obiekt NetGroup wywołuje wszystkie zdarzenia.
Informacje o korzystaniu z grup w sieciach ze wspomaganiem P2P zawiera artykuł Social Media Experiences with Flash Media and RTMFP, którego autorem także jest Tom Krcha.
Informacje o szczegółach technicznych działania sieci ze wspomaganiem P2P zawiera dokument P2P on the Flash Platform with RTMFP (autor: Matthew Kaufman, informatyk w firmie Adobe).
Powiązane elementy interfejsu API
flash.net.NetStream
Wartości flash.events.NetStatusEvent info.code zaczynające się od ciągu "NetGroup".
Właściwość | Zdefiniowane przez | ||
---|---|---|---|
constructor : Object
Odwołanie do obiektu klasy lub funkcji konstruktora, dotyczące danej instancji obiektu. | Object | ||
estimatedMemberCount : Number [tylko do odczytu]
Określa szacowaną liczbę elementów grupy na podstawie gęstości lokalnych węzłów sąsiadujących i przy założeniu, że rozkład adresów grupowych jest równomierny. | NetGroup | ||
info : NetGroupInfo [tylko do odczytu]
Zwraca obiekt NetGroupInfo, którego właściwości udostępniają parametry statystyczne jakości usług związane z transportem danych RTMFP tego obiektu NetGroup. | NetGroup | ||
localCoverageFrom : String [tylko do odczytu]
Określa początek zakresu adresów grupowych, dla których węzeł jest węzłem „najbliższym” i odpowiedzialnym. | NetGroup | ||
localCoverageTo : String [tylko do odczytu]
Określa koniec zakresu adresów grupowych, dla których węzeł jest węzłem „najbliższym” i odpowiedzialnym. | NetGroup | ||
neighborCount : Number [tylko do odczytu]
Określa liczbę elementów grupy, z którymi ten węzeł jest bezpośrednio połączony. | NetGroup | ||
receiveMode : String
Określa tryb odbioru routingu węzła jako jedną z wartości klasy wyliczeniowej NetGroupReceiveMode. | NetGroup | ||
replicationStrategy : String
Określa strategię pobierania przy replikacji obiektów. | NetGroup |
Metoda | Zdefiniowane przez | ||
---|---|---|---|
Konstruuje obiekt NetGroup dla określonego obiektu połączenia NetConnection i powoduje przyłączenie tego obiektu do grupy określonej przez parametr groupspec. | NetGroup | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Rejestruje obiekt detektora zdarzeń w obiekcie EventDispatcher, dzięki czemu detektor będzie otrzymywał powiadomienia o zdarzeniu. | EventDispatcher | ||
Dodaje obiekty o numerach od startIndex do endIndex włącznie do zbioru obiektów anonsowanych przez ten węzeł sąsiadom jako obiekty, dla których będzie realizował żądania. | NetGroup | ||
Umożliwia ręczne dodanie rekordu określającego, że peerID jest elementem grupy Group. | NetGroup | ||
Umożliwia ręczne dodanie sąsiada poprzez natychmiastowe nawiązanie połączenia bezpośrednio z określonym węzłem peerID, który już musi należeć do grupy Group. | NetGroup | ||
Dodaje obiekty o numerach od startIndex do endIndex włącznie do zbioru obiektów, które mają być pobrane. | NetGroup | ||
Powoduje odłączenie od grupy Group i zamknięcie tego obiektu NetGroup. | NetGroup | ||
Konwertuje identyfikator peerID na adres grupy odpowiedni dla metody sendToNearest(). | NetGroup | ||
Powoduje odmowę żądania odebranego we właściwości NetStatusEvent NetGroup.Replication.Request i dotyczącego obiektu anonsowanego wcześniej za pomocą metody addHaveObjects(). | NetGroup | ||
Wywołuje zdarzenie, tj. kieruje je do przepływu zdarzeń. | EventDispatcher | ||
Sprawdza, czy obiekt EventDispatcher zawiera jakiekolwiek detektory zarejestrowane dla konkretnego typu zdarzeń. | EventDispatcher | ||
Wskazuje, czy dla obiektu zdefiniowano określoną właściwość. | Object | ||
Wskazuje, czy instancja klasy Object należy do łańcucha prototypów obiektu określonego jako parametr. | Object | ||
Wysyła wiadomość do wszystkich elementów grupy. | NetGroup | ||
Wskazuje, czy określona właściwość istnieje i jest przeliczalna. | Object | ||
Usuwa detektor z obiektu EventDispatcher. | EventDispatcher | ||
Usuwa obiekty o numerach od startIndex do endIndex włącznie ze zbioru obiektów anonsowanych przez ten węzeł sąsiadom jako obiekty, dla których będzie realizował żądania. | NetGroup | ||
Usuwa obiekty o numerach od startIndex do endIndex włącznie ze zbioru obiektów, które mają być pobrane. | NetGroup | ||
Wysyła komunikat do wszystkich sąsiadów. | NetGroup | ||
Wysyła komunikat do sąsiada (lub węzła lokalnego) najbliższego określonemu adresowi grupowemu. | NetGroup | ||
Wysyła komunikat do sąsiada określonego w parametrze sendMode. | NetGroup | ||
Ustawia dostępność właściwości dynamicznej używanej w pętlach. | Object | ||
Zwraca ciąg reprezentujący obiekt — sformatowany zgodnie z konwencjami właściwymi dla ustawień regionalnych. | Object | ||
Zwraca ciąg reprezentujący określony obiekt. | Object | ||
Zwraca pierwotną wartość dla określonego obiektu. | Object | ||
Sprawdza, czy detektor zdarzeń określonego typu jest zarejestrowany w tym obiekcie EventDispatcher lub jego elementach macierzystych. | EventDispatcher | ||
Zaspokaja żądanie odebrane w zdarzeniu NetGroup.Replication.Request obiektu NetStatusEvent dotyczące obiektu anonsowanego wcześniej za pomocą metody addHaveObjects(). | NetGroup |
Zdarzenie | Podsumowanie | Zdefiniowane przez | ||
---|---|---|---|---|
[zdarzenie broadcast] Wywoływane, gdy program Flash Player lub aplikacja środowiska wykonawczego AIR uzyskuje fokus w systemie operacyjnym i przechodzi w stan aktywny. | EventDispatcher | |||
[zdarzenie broadcast] Wywoływane, gdy program Flash Player lub aplikacja AIR traci fokus w systemie operacyjnym i przechodzi w stan nieaktywny. | EventDispatcher | |||
Dysponowana, gdy obiekt NetGroup zgłasza swój status lub stan błędu. | NetGroup |
estimatedMemberCount | właściwość |
estimatedMemberCount:Number
[tylko do odczytu] Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10.1, AIR 2 |
Określa szacowaną liczbę elementów grupy na podstawie gęstości lokalnych węzłów sąsiadujących i przy założeniu, że rozkład adresów grupowych jest równomierny.
Implementacja
public function get estimatedMemberCount():Number
Powiązane elementy interfejsu API
info | właściwość |
info:NetGroupInfo
[tylko do odczytu] Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10.1, AIR 2 |
Zwraca obiekt NetGroupInfo, którego właściwości udostępniają parametry statystyczne jakości usług związane z transportem danych RTMFP tego obiektu NetGroup.
Implementacja
public function get info():NetGroupInfo
Powiązane elementy interfejsu API
localCoverageFrom | właściwość |
localCoverageFrom:String
[tylko do odczytu] Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10.1, AIR 2 |
Określa początek zakresu adresów grupowych, dla których węzeł jest węzłem „najbliższym” i odpowiedzialnym. Zakres określa się w kierunku rosnącym wzdłuż pierścienia adresów grupowych modulo 2256.
Implementacja
public function get localCoverageFrom():String
Powiązane elementy interfejsu API
localCoverageTo | właściwość |
localCoverageTo:String
[tylko do odczytu] Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10.1, AIR 2 |
Określa koniec zakresu adresów grupowych, dla których węzeł jest węzłem „najbliższym” i odpowiedzialnym. Zakres określa się w kierunku rosnącym wzdłuż pierścienia adresów grupowych modulo 2256.
Implementacja
public function get localCoverageTo():String
Powiązane elementy interfejsu API
neighborCount | właściwość |
receiveMode | właściwość |
receiveMode:String
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10.1, AIR 2 |
Określa tryb odbioru routingu węzła jako jedną z wartości klasy wyliczeniowej NetGroupReceiveMode.
Implementacja
public function get receiveMode():String
public function set receiveMode(value:String):void
Powiązane elementy interfejsu API
replicationStrategy | właściwość |
replicationStrategy:String
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10.1, AIR 2 |
Określa strategię pobierania przy replikacji obiektów. Wartość jest jedną z wyliczonych w klasie NetGroupReplicationStrategy.
Implementacja
public function get replicationStrategy():String
public function set replicationStrategy(value:String):void
Powiązane elementy interfejsu API
NetGroup | () | Konstruktor |
public function NetGroup(connection:NetConnection, groupspec:String)
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10.1, AIR 2 |
Konstruuje obiekt NetGroup dla określonego obiektu połączenia NetConnection i powoduje przyłączenie tego obiektu do grupy określonej przez parametr groupspec
.
W większości przypadków groupspec
umożliwia użycie wyjściowego łącza sieciowego w systemie lokalnym. W momencie konstruowania obiektu NetStream lub NetGroup na podstawie specyfikacji grupy w programie Flash Player wyświetlane jest okno dialogowe dotyczące ochrony prywatności. Okno zawiera pytanie, czy program Flash Player może wykorzystywać połączenie do udostępniania danych węzłom w sieci P2P użytkownika. Jeśli użytkownik kliknie opcję zezwolenia dla danej domeny, okno dialogowe nie będzie wyświetlane przy następnych próbach połączenia z tą samą aplikacją. Jeśli użytkownik nie zezwoli na obsługę sieci P2P, wszystkie funkcje P2P w grupie (ogłaszanie, routing ukierunkowany, replikacja obiektów i multiemisja) będą wyłączone. Jeśli użytkownik wyrazi zgodę, do detektora zdarzeń obiektu NetConnection wysyłane jest zdarzenie NetStatusEvent z właściwością code
obiektu info
ustawioną na NetGroup.Connect.Success
. W razie braku zezwolenia właściwość code
przyjmuje wartość NetGroup.Connect.Rejected
. Do czasu odebrania zdarzenia NetGroup.Connect.Success
każda próba wywołania jakiejkolwiek metody obiektu NetGroup spowoduje wygenerowanie wyjątku.
Uwaga: Gdy klient subskrybuje strumień multiemisji obsługiwany natywnie w sieci IP, okno dialogowe dotyczące zabezpieczeń nie jest wyświetlane.
Parametryconnection:NetConnection — Obiekt NetConnection.
| |
groupspec:String — Ciąg określający grupę równorzędną protokołu RTMFP, do której ma zostać przyłączony obiekt, a w szczególności nazwę, możliwości, ograniczenia i autoryzacje tego obiektu.
new NetGroup(myConnection, myGroupSpecifier.groupspecWithAuthorizations()); |
Zgłasza
ArgumentError — Wystąpienie NetConnection nie jest połączone.
| |
Error — Parametr groupspec jest niepoprawny.
|
Powiązane elementy interfejsu API
addHaveObjects | () | metoda |
public function addHaveObjects(startIndex:Number, endIndex:Number):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10.1, AIR 2 |
Dodaje obiekty o numerach od startIndex
do endIndex
włącznie do zbioru obiektów anonsowanych przez ten węzeł sąsiadom jako obiekty, dla których będzie realizował żądania. Domyślnie zbiór Have jest pusty. Indeksy muszą być liczbami całkowitymi z przedziału od 0 do 9007199254740992.
Dodatkowe informacje o replikacji obiektów zawiera dokument Replikacja obiektu w obrębie grupy na stronie Flash Media Server — Podręcznik dla programistów.
Ta metoda wysyła do detektora zdarzeń obiektu NetGroup zdarzenie NetStatusEvent z wartością NetGroup.Replication.Request
we właściwości code
obiektu info
.
UWAGA: przed wywołaniem tej metody należy wykryć zdarzenie NetGroup.Neighbor.Connect
.
Parametry
startIndex:Number — Początek zakresu indeksów obiektów, jakie mają być dodane do zbioru Have.
| |
endIndex:Number — Koniec zakresu indeksów obiektów, jakie mają być dodane do zbioru Have.
|
Zgłasza
RangeError — Liczba przekazana do tej metody jest mniejsza od 0 lub większa od 9007199254740992.
|
Powiązane elementy interfejsu API
addMemberHint | () | metoda |
public function addMemberHint(peerID:String):Boolean
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10.1, AIR 2 |
Umożliwia ręczne dodanie rekordu określającego, że peerID
jest elementem grupy Group. Próba natychmiastowego nawiązania połączenia jest podejmowana tylko wtedy, gdy taka konieczność wynika z topologii.
Parametry
peerID:String — Element peerID, który ma być dodany do zbioru potencjalnych sąsiadów.
|
Boolean — TRUE w przypadku powodzenia, FALSE w przypadku niepowodzenia.
|
Powiązane elementy interfejsu API
addNeighbor | () | metoda |
public function addNeighbor(peerID:String):Boolean
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10.1, AIR 2 |
Umożliwia ręczne dodanie sąsiada poprzez natychmiastowe nawiązanie połączenia bezpośrednio z określonym węzłem peerID
, który już musi należeć do grupy Group. To bezpośrednie połączenie może później zostać usunięte, jeśli nie jest potrzebne ze względu na topologię.
Parametry
peerID:String — Węzeł peerID, z którym ma być natychmiast nawiązane połączenie.
|
Boolean — TRUE w przypadku powodzenia, FALSE w przypadku niepowodzenia.
|
Powiązane elementy interfejsu API
addWantObjects | () | metoda |
public function addWantObjects(startIndex:Number, endIndex:Number):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10.1, AIR 2 |
Dodaje obiekty o numerach od startIndex
do endIndex
włącznie do zbioru obiektów, które mają być pobrane. Indeksy muszą być liczbami całkowitymi z przedziału od 0 do 9007199254740992. Domyślnie zbiór Want jest pusty.
Dodatkowe informacje o replikacji obiektów zawiera dokument Replikacja obiektu w obrębie grupy na stronie Flash Media Server — Podręcznik dla programistów.
Ta metoda wysyła do detektora zdarzeń obiektu NetGroup zdarzenie NetStatusEvent zawierające wartość NetGroup.Replication.Fetch.SendNotify
we właściwości info.code
. Po tym zdarzeniu następuje zdarzenie NetGroup.Replication.Fetch.Failed
lub NetGroup.Replication.Fetch.Result
.
UWAGA: Przed wywołaniem tej metody należy wykryć zdarzenie NetGroup.Neighbor.Connect
.
Parametry
startIndex:Number — Początek zakresu indeksów obiektów, jakie mają być dodane do zbioru Want.
| |
endIndex:Number — Koniec zakresu indeksów obiektów, jakie mają być dodane do zbioru Want.
|
Zgłasza
RangeError — Liczba przekazana do tej metody jest mniejsza od 0 lub większa od 9007199254740992.
|
Powiązane elementy interfejsu API
close | () | metoda |
public function close():void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10.1, AIR 2 |
Powoduje odłączenie od grupy Group i zamknięcie tego obiektu NetGroup. Po wywołaniu tej metody obiekt NetGroup przestaje być zdatny do użytku.
convertPeerIDToGroupAddress | () | metoda |
public function convertPeerIDToGroupAddress(peerID:String):String
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10.1, AIR 2 |
Przekształca identyfikator peerID na adres grupowy odpowiedni dla metody sendToNearest()
.
Parametry
peerID:String — Identyfikator peerID do przekształcenia.
|
String — Adres grupowy odpowiadający identyfikatorowi peerID.
|
Powiązane elementy interfejsu API
denyRequestedObject | () | metoda |
public function denyRequestedObject(requestID:int):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10.1, AIR 2 |
Powoduje odmowę żądania odebranego we właściwości NetGroup.Replication.Request
obiektu NetStatusEvent i dotyczącego obiektu anonsowanego wcześniej za pomocą metody addHaveObjects()
. Węzeł żądający może ponownie żądać tego samego obiektu dopóki nie zostanie on wycofany ze zbioru Have.
Dodatkowe informacje o replikacji obiektów zawiera dokument Replikacja obiektu w obrębie grupy na stronie Flash Media Server — Podręcznik dla programistów.
UWAGA: przed wywołaniem tej metody należy wykryć zdarzenie NetGroup.Neighbor.Connect
.
Parametry
requestID:int — Identyfikator żądania podany w zdarzeniu NetGroup.Replication.Request .
|
Powiązane elementy interfejsu API
post | () | metoda |
public function post(message:Object):String
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10.1, AIR 2 |
Wysyła wiadomość do wszystkich elementów grupy. Aby można było wywołać tę metodę, właściwość GroupSpecifier.postingEnabled
w specyfikacji grupy przekazanej do konstruktora NetGroup musi mieć wartość true
. Więcej informacji zawiera dokument Publikowanie wiadomości w grupie na stronie Flash Media Server — Podręcznik dla programistów.
Wszystkie komunikaty muszą być unikatowe; nie jest możliwa propagacja komunikatu identycznego z ogłoszonym wcześniej. Aby zapewnić unikatowość komunikatów, należy przypisywać im numery kolejne.
Komunikaty nie są dostarczane w określonej kolejności. Dostarczenie komunikatu nie jest gwarantowane.
Komunikaty są serializowane w formacie AMF. Komunikat może należeć do jednego z następujących typów: Object, int, Number lub String. Komunikat nie może być obiektem MovieClip.
Ta metoda wysyła do detektora zdarzeń obiektu NetGroup zdarzenie NetStatusEvent zawierające wartość "NetGroup.Posting.Notify"
we właściwości info.code
. Zdarzenie "NetGroup.Posting.Notify"
jest wysyłane do obiektu NetGroup zarówno na kliencie, jak i na serwerze.
UWAGA: przed wywołaniem tej metody należy wykryć zdarzenie NetGroup.Neighbor.Connect
.
Parametry
message:Object — Komunikat, który ma zostać wysłany do wszystkich pozostałych elementów grupy.
|
String — Identyfikator (messageID) komunikatu, jeśli zostanie on ogłoszony, lub null w razie błędu. messageID to serializowana postać nieprzetworzonych bajtów komunikatu w formacie szesnastkowym lub SHA256.
|
Powiązane elementy interfejsu API
Przykład ( Sposób korzystania z tego przykładu )
Po uruchomieniu aplikacji można wprowadzić dowolną nazwę grupy do wejściowego pola tekstowego. W klasie GroupSpecifier nazwa (razem z dowolną ustawioną przez użytkownika właściwością GroupSpecifier) jest używana w celu utworzenia ciągu znaków, który pozostanie na stałe unikalną nazwą grupy. Aby przyłączyć kolejnego klienta do grupy, klient musi użyć tej samej nazwy grupy. Na przykład, jeśli klient A użyje nazwy grupy "firstmesh", pozostałe klienty, chcąc komunikować się z klientem A, również muszą użyć nazwy grupy "firstmesh". Jeśli klient B użyje nazwy grupy "kite", wówczas połączenie zostanie nawiązane pomyślnie, ale zostanie utworzona nowa grupa i klient B nie będzie mógł się komunikować z klientem A, ani z żadnym innym klientem z grupy "firstmesh".
Aby uruchomić ten przykład, należy dodać składniki Button, Label, TextInput oraz TextArea do obiektu Library w programie 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 | () | metoda |
public function removeHaveObjects(startIndex:Number, endIndex:Number):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10.1, AIR 2 |
Usuwa obiekty o numerach od startIndex
do endIndex
włącznie ze zbioru obiektów anonsowanych przez ten węzeł sąsiadom jako obiekty, dla których będzie realizował żądania. Indeksy muszą być liczbami całkowitymi z przedziału od 0 do 9007199254740992.
Dodatkowe informacje o replikacji obiektów zawiera dokument Replikacja obiektu w obrębie grupy na stronie Flash Media Server — Podręcznik dla programistów.
UWAGA: przed wywołaniem tej metody należy wykryć zdarzenie NetGroup.Neighbor.Connect
.
Parametry
startIndex:Number — Początek zakresu indeksów obiektów, jakie mają być usunięte ze zbioru Have.
| |
endIndex:Number — Koniec zakresu indeksów obiektów, jakie mają być usunięte ze zbioru Have.
|
Zgłasza
RangeError — Liczba przekazana do tej metody jest mniejsza od 0 lub większa od 9007199254740992.
|
Powiązane elementy interfejsu API
removeWantObjects | () | metoda |
public function removeWantObjects(startIndex:Number, endIndex:Number):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10.1, AIR 2 |
Usuwa obiekty o numerach od startIndex
do endIndex
włącznie ze zbioru obiektów, które mają być pobrane. Indeksy muszą być liczbami całkowitymi z przedziału od 0 do 9007199254740992.
Dodatkowe informacje o replikacji obiektów zawiera dokument Replikacja obiektu w obrębie grupy na stronie Flash Media Server — Podręcznik dla programistów.
UWAGA: przed wywołaniem tej metody należy wykryć zdarzenie NetGroup.Neighbor.Connect
.
Parametry
startIndex:Number — Początek zakresu indeksów obiektów, jakie mają być usunięte ze zbioru Want.
| |
endIndex:Number — Koniec zakresu indeksów obiektów, jakie mają być usunięte ze zbioru Want.
|
Zgłasza
RangeError — Liczba przekazana do tej metody jest mniejsza od 0 lub większa od 9007199254740992.
|
Powiązane elementy interfejsu API
sendToAllNeighbors | () | metoda |
public function sendToAllNeighbors(message:Object):String
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10.1, AIR 2 |
Wysyła komunikat do wszystkich sąsiadów. Zwraca wartość NetGroupSendResult.SENT
, jeśli wybrany był co najmniej jeden sąsiad.
Więcej informacji o routingu wiadomości zawiera dokument Kierowanie wiadomości bezpośrednio do odbiorcy na stronie Flash Media Server — Podręcznik dla programistów.
Gdy węzeł odbiera komunikat, do detektora zdarzeń obiektu NetGroup wysyłane jest zdarzenie NetStatusEvent z wartością NetGroup.SendTo.Notify
we właściwości code
obiektu info
.
UWAGA: przed wywołaniem tej metody należy wykryć zdarzenie NetGroup.Neighbor.Connect
.
Parametry
message:Object — Komunikat do wysłania.
|
String — Właściwość należąca do klasy wyliczeniowej NetGroupSendResult, wskazująca na powodzenie lub niepowodzenie operacji wysyłania.
|
Powiązane elementy interfejsu API
sendToNearest | () | metoda |
public function sendToNearest(message:Object, groupAddress:String):String
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10.1, AIR 2 |
Wysyła komunikat do sąsiada (lub węzła lokalnego) najbliższego określonemu adresowi grupowemu. Powoduje, że brani są pod uwagę sąsiedzi z całego pierścienia. Zwraca wartość NetGroupSendResult.SENT
, jeśli komunikat został pomyślnie wysłany w kierunku celu.
Więcej informacji o routingu wiadomości zawiera dokument Kierowanie wiadomości bezpośrednio do odbiorcy na stronie Flash Media Server — Podręcznik dla programistów.
Gdy węzeł odbiera komunikat, do detektora zdarzeń obiektu NetGroup wysyłane jest zdarzenie NetStatusEvent z wartością NetGroup.SendTo.Notify
we właściwości code
obiektu info
.
UWAGA: przed wywołaniem tej metody należy wykryć zdarzenie NetGroup.Neighbor.Connect
.
Parametry
message:Object — Komunikat do wysłania.
| |
groupAddress:String — Adres grupowy, do którego ma być skierowany komunikat.
|
String — Właściwość należąca do klasy wyliczeniowej NetGroupSendResult, wskazująca na powodzenie lub niepowodzenie operacji wysyłania.
|
Powiązane elementy interfejsu API
sendToNeighbor | () | metoda |
public function sendToNeighbor(message:Object, sendMode:String):String
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10.1, AIR 2 |
Wysyła komunikat do sąsiada określonego w parametrze sendMode
. Zwraca wartość NetGroupSendResult.SENT
, jeśli komunikat został pomyślnie wysłany do żądanego celu.
Więcej informacji o routingu wiadomości zawiera dokument Kierowanie wiadomości bezpośrednio do odbiorcy na stronie Flash Media Server — Podręcznik dla programistów.
Gdy węzeł odbiera komunikat, do detektora zdarzeń obiektu NetGroup wysyłane jest zdarzenie NetStatusEvent z wartością NetGroup.SendTo.Notify
we właściwości code
obiektu info
.
UWAGA: przed wywołaniem tej metody należy wykryć zdarzenie NetGroup.Neighbor.Connect
.
Parametry
message:Object — Komunikat do wysłania.
| |
sendMode:String — Właściwość klasy wyliczeniowej NetGroupSendMode określająca sąsiada, do którego ma być wysłany komunikat.
|
String — Właściwość należąca do klasy wyliczeniowej NetGroupSendResult, wskazująca na powodzenie lub niepowodzenie operacji wysyłania.
|
Powiązane elementy interfejsu API
writeRequestedObject | () | metoda |
public function writeRequestedObject(requestID:int, object:Object):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10.1, AIR 2 |
Zaspokaja żądanie odebrane w zdarzeniu NetGroup.Replication.Request
obiektu NetStatusEvent dotyczące obiektu anonsowanego wcześniej za pomocą metody addHaveObjects()
. Obiekt object
może należeć do jednego z następujących typów: Object, int, Number i String. Obiekt object
nie może należeć do typu MovieClip.
Dodatkowe informacje o replikacji obiektów zawiera dokument Replikacja obiektu w obrębie grupy na stronie Flash Media Server — Podręcznik dla programistów.
UWAGA: przed wywołaniem tej metody należy wykryć zdarzenie NetGroup.Neighbor.Connect
.
Parametry
requestID:int — Identyfikator żądania podany w zdarzeniu NetGroup.Replication.Request .
| |
object:Object — Obiekt odpowiadający indeksowi podanemu w zdarzeniu NetGroup.Replication.Request .
|
Powiązane elementy interfejsu API
netStatus | Zdarzenie |
flash.events.NetStatusEvent
właściwość NetStatusEvent.type =
flash.events.NetStatusEvent.NET_STATUS
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 10.1 |
Dysponowana, gdy obiekt NetGroup zgłasza swój status lub stan błędu. Zdarzenie netStatus
zawiera właściwość info
. Właściwość info
jest obiektem zawierającym informacje o zdarzeniu, np. o tym, czy próba połączenia powiodła się, czy nie.
type
obiektu zdarzenia netStatus
.
To zdarzenie ma następujące właściwości:
Właściwość | Wartość |
---|---|
bubbles | false |
cancelable | false ; nie ma domyślnego zachowania, które można byłoby anulować. |
currentTarget | Obiekt przetwarzający aktywnie obiekt Event za pomocą detektora zdarzeń. |
info | Obiekt z właściwościami opisującymi stan obiektu lub warunek błędu. |
target | Obiekt NetConnection lub NetStream informujący o swoim stanie. |
Powiązane elementy interfejsu API
Po uruchomieniu aplikacji można wprowadzić dowolną nazwę grupy do wejściowego pola tekstowego. W klasie GroupSpecifier nazwa (razem z dowolną ustawioną przez użytkownika właściwością GroupSpecifier) jest używana w celu utworzenia ciągu znaków, który pozostanie na stałe unikalną nazwą grupy. Aby przyłączyć kolejnego klienta do grupy, klient musi użyć tej samej nazwy grupy. Na przykład, jeśli klient A użyje nazwy grupy "firstmesh", pozostałe klienty, chcąc komunikować się z klientem A, również muszą użyć nazwy grupy "firstmesh". Jeśli klient B użyje nazwy grupy "kite", wówczas połączenie zostanie nawiązane pomyślnie, ale zostanie utworzona nowa grupa i klient B nie będzie mógł się komunikować z klientem A, ani z żadnym innym klientem z grupy "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, 12:06 PM Z