Paket | flash.net |
Klasse | public class NetGroup |
Vererbung | NetGroup EventDispatcher Object |
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 10.1, AIR 2 |
-
Überwachen der Dienstgüte (Quality of Service, QoS). Die
info
-Eigenschaft enthält ein NetGroupInfo-Objekt, dessen Eigenschaften QoS-Statistiken für diese Gruppe bereitstellen. -
Posting. Rufen Sie
post()
auf, um ActionScript-Meldungen an alle Mitglieder einer Gruppe als Broadcast zu senden. -
Direktes Weiterleiten. Rufen Sie
sendToNearest()
,sendToNeighbor()
undsendToAllNeighbors()
auf, um eine kurze Datenmeldung an ein bestimmtes Mitglied einer Peer-to-Peer-Gruppe zu senden. Die Quelle und das Ziel müssen keine direkte Verbindung haben. -
Objektreplikation. Rufen Sie
addHaveObjects()
,removeHaveObjects()
,addWantObjects()
,removeWantObjects()
,writeRequestedObject()
unddenyRequestedObject()
auf, um große Daten in Portionen aufzuteilen und für alle Knoten in einer Peer-to-Peer-Gruppe zu replizieren.
In der clientseitigen NetGroup-Klasse setzt NetConnection die folgenden Ereignisse ab:
- NetGroup.Connect.Success
- NetGroup.Connect.Failed
- NetGroup.Connect.Rejected
Die info.group
-Eigenschaft des Ereignisobjekts enthält einen Verweis auf die Ereignisquelle (die NetGroup). Die NetGroup setzt alle anderen Ereignisse ab. In der serverseitigen NetGroup-Klasse setzt die NetGroup alle Ereignisse ab.
Informationen zur Verwendung von Gruppen mit Peer-Assisted-Networking mit finden Sie unter Social Media Experiences with Flash Media and RTMFP, ebenfalls von Tom Krcha.
Informationen zu den technischen Details von Peer-Assisted-Networking finden Sie unter P2P on the Flash Platform with RTMFP von Adobe Computer Scientist Matthew Kaufman.
Verwandte API-Elemente
flash.net.NetStream
flash.events.NetStatusEvent info.Codewerte, die mit "NetGroup" beginnen
Eigenschaft | Definiert von | ||
---|---|---|---|
constructor : Object
Ein Verweis auf das Klassenobjekt oder die Konstruktorfunktion für eine angegebene Objektinstanz. | Object | ||
estimatedMemberCount : Number [schreibgeschützt]
Gibt die geschätzte Anzahl der Mitglieder der Gruppe an, basierend auf der Dichte der lokalen Nachbarschaft und davon ausgehend, dass die Gruppenadressen gleichmäßig verteilt sind. | NetGroup | ||
info : NetGroupInfo [schreibgeschützt]
Gibt ein NetGroupInfo-Objekt zurück, dessen Eigenschaften Statistiken zur Dienstgüte in Bezug auf den RTMFP-Peer-to-Peer-Datentransport dieser NetGroup bereitstellen. | NetGroup | ||
localCoverageFrom : String [schreibgeschützt]
Legt den Beginn des Bereichs der Gruppenadressen fest, für die dieser Knoten der „nächste“ und zuständig ist. | NetGroup | ||
localCoverageTo : String [schreibgeschützt]
Gibt das Ende des Bereichs der Gruppenadressen an, für die dieser Knoten der „nächste“ und zuständig ist. | NetGroup | ||
neighborCount : Number [schreibgeschützt]
Legt die Anzahl der Gruppenmitglieder fest, mit denen dieser Knoten direkt verbunden ist. | NetGroup | ||
receiveMode : String
Gibt den Routing-Empfangsmodus dieses Knotens als einen der Werte in der NetGroupReceiveMode-Aufzählungsklasse an. | NetGroup | ||
replicationStrategy : String
Legt die Abrufstrategie für die Objektreplikation fest. | NetGroup |
Methode | Definiert von | ||
---|---|---|---|
Konstruiert eine NetGroup für das angegebene NetConnection-Objekt und fügt es der von groupspec angegebenen Gruppe hinzu. | NetGroup | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Registriert ein Ereignis-Listener-Objekt bei einem EventDispatcher-Objekt, sodass der Listener über ein Ereignis benachrichtigt wird. | EventDispatcher | ||
Fügt Objekte von startIndex bis endIndex zu den Objekten hinzu, die dieser Knoten den Nachbarn als Objekte anbietet, für die er Anforderungen erfüllt. | NetGroup | ||
Fügt manuell einen Datensatz hinzu, der angibt, dass peerID ein Mitglied der Gruppe ist. | NetGroup | ||
Fügt manuell einen Nachbarn hinzu, indem sofort eine direkte Verbindung zu der angegebenen peerID hergestellt wird, die sich bereits in dieser Gruppe befinden muss. | NetGroup | ||
Fügt Objekte von startIndex bis endIndex zum Satz der abzurufenden Objekte hinzu. | NetGroup | ||
Trennt die Verbindung zur Gruppe und schließt diese NetGroup. | NetGroup | ||
Konvertiert eine peerID in eine Gruppenadresse, die sich für die Verwendung mit der sendToNearest()-Methode eignet. | NetGroup | ||
Lehnt eine Anforderung ab, die in NetStatusEvent NetGroup.Replication.Request für ein zuvor mit addHaveObjects() angebotenes Objekt empfangen wurde. | NetGroup | ||
Sendet ein Ereignis in den Ereignisablauf. | EventDispatcher | ||
Überprüft, ob das EventDispatcher-Objekt Listener für einen bestimmten Ereignistyp registriert hat. | EventDispatcher | ||
Gibt an, ob für ein Objekt eine bestimmte Eigenschaft definiert wurde. | Object | ||
Gibt an, ob eine Instanz der Object-Klasse in der Prototypkette des Objekts vorhanden ist, das als Parameter angegeben wurde. | Object | ||
Sendet eine Nachricht an alle Mitglieder einer Gruppe. | NetGroup | ||
Gibt an, ob die angegebene Eigenschaft vorhanden ist und durchlaufen werden kann. | Object | ||
Entfernt einen Listener aus dem EventDispatcher-Objekt. | EventDispatcher | ||
Entfernt Objekte von startIndex bis endIndex von den Objekten, die dieser Knoten den Nachbarn als Objekte anbietet, für die er Anforderungen erfüllt. | NetGroup | ||
Entfernt Objekte von startIndex bis endIndex aus dem Satz der abzurufenden Objekte. | NetGroup | ||
Sendet eine Meldung an alle Nachbarn. | NetGroup | ||
Sendet eine Meldung an den Nachbarn (oder lokalen Knoten), der der angegebenen Gruppenadresse am nächsten ist. | NetGroup | ||
Sendet eine Nachricht an den Nachbarn, der vom sendMode-Parameter angegeben wird. | NetGroup | ||
Legt die Verfügbarkeit einer dynamischen Eigenschaft für Schleifenoperationen fest. | Object | ||
Gibt die Stringdarstellung dieses Objekts zurück, formatiert entsprechend den Konventionen des Gebietsschemas. | Object | ||
Gibt das angegebene Objekt als String zurück. | Object | ||
Gibt den Grundwert des angegebenen Objekts zurück. | Object | ||
Überprüft, ob bei diesem EventDispatcher-Objekt oder bei einem seiner Vorgänger ein Ereignis-Listener für einen bestimmten Ereignistyp registriert ist. | EventDispatcher | ||
Erfüllt die Anforderung als von NetStatusEvent NetGroup.Replication.Request empfangen für ein Objekt, das zuvor mit der addHaveObjects()-Methode angeboten wurden. | NetGroup |
Ereignis | Übersicht | Definiert von | ||
---|---|---|---|---|
[broadcast event] Wird ausgelöst, wenn Flash Player oder eine AIR-Anwendung den Betriebssystemfokus erhält und aktiv wird. | EventDispatcher | |||
[broadcast event] Wird ausgelöst, wenn Flash Player- oder die AIR-Anwendung den Fokus verliert und inaktiv wird. | EventDispatcher | |||
Wird abgesetzt, wenn der Status oder die Fehlerbedingung eines NetGroup-Objekts protokolliert wird. | NetGroup |
estimatedMemberCount | Eigenschaft |
estimatedMemberCount:Number
[schreibgeschützt] Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 10.1, AIR 2 |
Gibt die geschätzte Anzahl der Mitglieder der Gruppe an, basierend auf der Dichte der lokalen Nachbarschaft und davon ausgehend, dass die Gruppenadressen gleichmäßig verteilt sind.
Implementierung
public function get estimatedMemberCount():Number
Verwandte API-Elemente
info | Eigenschaft |
info:NetGroupInfo
[schreibgeschützt] Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 10.1, AIR 2 |
Gibt ein NetGroupInfo-Objekt zurück, dessen Eigenschaften Statistiken zur Dienstgüte in Bezug auf den RTMFP-Peer-to-Peer-Datentransport dieser NetGroup bereitstellen.
Implementierung
public function get info():NetGroupInfo
Verwandte API-Elemente
localCoverageFrom | Eigenschaft |
localCoverageFrom:String
[schreibgeschützt] Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 10.1, AIR 2 |
Legt den Beginn des Bereichs der Gruppenadressen fest, für die dieser Knoten der „nächste“ und zuständig ist. Der Bereich wird in aufsteigender Richtung entlang des Gruppenadressrings mod 2256 angegeben.
Implementierung
public function get localCoverageFrom():String
Verwandte API-Elemente
localCoverageTo | Eigenschaft |
localCoverageTo:String
[schreibgeschützt] Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 10.1, AIR 2 |
Gibt das Ende des Bereichs der Gruppenadressen an, für die dieser Knoten der „nächste“ und zuständig ist. Der Bereich wird in aufsteigender Richtung entlang des Gruppenadressrings mod 2256 angegeben.
Implementierung
public function get localCoverageTo():String
Verwandte API-Elemente
neighborCount | Eigenschaft |
receiveMode | Eigenschaft |
receiveMode:String
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 10.1, AIR 2 |
Gibt den Routing-Empfangsmodus dieses Knotens als einen der Werte in der NetGroupReceiveMode-Aufzählungsklasse an.
Implementierung
public function get receiveMode():String
public function set receiveMode(value:String):void
Verwandte API-Elemente
replicationStrategy | Eigenschaft |
replicationStrategy:String
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 10.1, AIR 2 |
Legt die Abrufstrategie für die Objektreplikation fest. Der Wert ist einer der aufgezählten Werte in der NetGroupReplicationStrategy-Klasse.
Implementierung
public function get replicationStrategy():String
public function set replicationStrategy(value:String):void
Verwandte API-Elemente
NetGroup | () | Konstruktor |
public function NetGroup(connection:NetConnection, groupspec:String)
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 10.1, AIR 2 |
Konstruiert eine NetGroup für das angegebene NetConnection-Objekt und fügt es der von groupspec
angegebenen Gruppe hinzu.
In den meisten Fällen hat eine groupspec
das Potenzial zur Verwendung des Netzwerk-Uplinks im lokalen System. Wenn ein NetStream- oder NetGroup-Objekt mit einem groupspec konstruiert wird, zeigt Flash Player ein Dialogfeld zum Datenschutz an. In diesem Dialogfeld wird gefragt, ob Flash Player die Verbindung nutzen kann, um Daten für die Peers des Benutzers freizugeben. Wenn der Benutzer auf „Für diese Domäne zulassen“ klickt, wird das Dialogfeld das nächste Mal, wenn der Benutzer eine Verbindung zu dieser Anwendung herstellt, nicht mehr angezeigt. Wenn ein Benutzer Peer-Assisted-Networking nicht zulässt, sind alle Peer-Funktionen innerhalb der Gruppe (Posting, direkte Weiterleitung und Objektreplikation) deaktiviert. Wird diese Berechtigung gewährt, wird ein NetStatusEvent an den Ereignis-Listener der NetConnection mit NetGroup.Connect.Success
in der code
-Eigenschaft des info
-Objekts gesendet. Wird die Berechtigung verweigert, hat die code
-Eigenschaft den Wert NetGroup.Connect.Rejected
. Bis ein NetGroup.Connect.Success
-Ereignis empfangen wird, wird eine Ausnahme ausgegeben, wenn Sie versuchen, eine Methode des NetGroup-Objekts aufzurufen.
Hinweis: Wenn ein Client einen Native-IP-Multicast-Stream abonniert, wird das Sicherheitsdialogfeld nicht angezeigt.
Parameterconnection:NetConnection — Ein NetConnection-Objekt.
| |
groupspec:String — Ein String, der die RTMFP-Peer-to-Peer-Gruppe, der beigetreten werden soll, angibt, einschließlich Name, Fähigkeiten, Einschränkungen und Autorisierung dieses Mitglieds.
new NetGroup(myConnection, myGroupSpecifier.groupspecWithAuthorizations()); |
Auslöser
ArgumentError — Die NetConnection-Instanz ist nicht verbunden.
| |
Error — Die groupspec ist ungültig.
|
Verwandte API-Elemente
addHaveObjects | () | Methode |
public function addHaveObjects(startIndex:Number, endIndex:Number):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 10.1, AIR 2 |
Fügt Objekte von startIndex
bis endIndex
zu den Objekten hinzu, die dieser Knoten den Nachbarn als Objekte anbietet, für die er Anforderungen erfüllt. Standardmäßig ist der Have-Satz leer. Indizes müssen ganze Zahlen von 0 bis 9007199254740992 sein.
Weitere Informationen zur Objektreplizierung finden Sie unter „Replicate an object within a group“ im Flash Media Server Developer’s Guide.
Diese Methode sendet ein NetStatusEvent an den Ereignis-Listener der NetGroup mit "NetGroup.Replication.Request"
in der code
-Eigenschaft des info
-Objekts.
HINWEIS: Prüfen Sie auf das NetGroup.Neighbor.Connect
-Ereignis, bevor Sie diese Methode aufrufen.
Parameter
startIndex:Number — Der Anfang des Bereichs der Objektindizes, die dem Have-Satz hinzugefügt werden sollen.
| |
endIndex:Number — Das Ende des Bereichs der Objektindizes, die dem Have-Satz hinzugefügt werden sollen.
|
Auslöser
RangeError — Eine Zahl, die an diese Methode übergeben wird, ist kleiner als 0 oder größer als 9007199254740992.
|
Verwandte API-Elemente
addMemberHint | () | Methode |
public function addMemberHint(peerID:String):Boolean
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 10.1, AIR 2 |
Fügt manuell einen Datensatz hinzu, der angibt, dass peerID
ein Mitglied der Gruppe ist. Es wird nur versucht, sofort eine Verbindung herzustellen, wenn dies für die Topologie erforderlich ist.
Parameter
peerID:String — Die peerID, die dem Satz der potenziellen Nachbarn hinzugefügt wird.
|
Boolean — TRUE bei Erfolg, FALSE bei Fehlschlagen.
|
Verwandte API-Elemente
addNeighbor | () | Methode |
public function addNeighbor(peerID:String):Boolean
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 10.1, AIR 2 |
Fügt manuell einen Nachbarn hinzu, indem sofort eine direkte Verbindung zu der angegebenen peerID
hergestellt wird, die sich bereits in dieser Gruppe befinden muss. Diese direkte Verbindung kann später aufgegeben werden, wenn sie nicht mehr für die Topologie erforderlich ist.
Parameter
peerID:String — Die peerID, zu der sofort eine Verbindung hergestellt werden soll.
|
Boolean — TRUE bei Erfolg, FALSE bei Fehlschlagen.
|
Verwandte API-Elemente
addWantObjects | () | Methode |
public function addWantObjects(startIndex:Number, endIndex:Number):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 10.1, AIR 2 |
Fügt Objekte von startIndex
bis endIndex
zum Satz der abzurufenden Objekte hinzu. Indizes müssen ganze Zahlen von 0 bis 9007199254740992 sein. Standardmäßig ist der Want-Satz leer.
Weitere Informationen zur Objektreplizierung finden Sie unter „Replicate an object within a group“ im Flash Media Server Developer’s Guide.
Diese Methode sendet ein NetStatusEvent an den Ereignis-Listener von NetGroup mit NetGroup.Replication.Fetch.SendNotify
in der info.code
-Eigenschaft hinzu. Diesem Ereignis folgt ein NetGroup.Replication.Fetch.Failed
- oder NetGroup.Replication.Fetch.Result
-Ereignis.
HINWEIS: Prüfen Sie auf das NetGroup.Neighbor.Connect
-Ereignis, bevor Sie diese Methode aufrufen.
Parameter
startIndex:Number — Der Anfang des Bereichs der Objektindizes, die dem Want-Satz hinzugefügt werden sollen.
| |
endIndex:Number — Das Ende des Bereichs der Objektindizes, die dem Want-Satz hinzugefügt werden sollen.
|
Auslöser
RangeError — Eine Zahl, die an diese Methode übergeben wird, ist kleiner als 0 oder größer als 9007199254740992.
|
Verwandte API-Elemente
close | () | Methode |
public function close():void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 10.1, AIR 2 |
Trennt die Verbindung zur Gruppe und schließt diese NetGroup. Diese NetGroup ist nach dem Aufruf dieser Methode nicht verwendbar.
convertPeerIDToGroupAddress | () | Methode |
public function convertPeerIDToGroupAddress(peerID:String):String
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 10.1, AIR 2 |
Konvertiert eine peerID in eine Gruppenadresse, die sich für die Verwendung mit der sendToNearest()
-Methode eignet.
Parameter
peerID:String — Die zu konvertierende peerID.
|
String — Die Gruppenadresse für die peerID.
|
Verwandte API-Elemente
denyRequestedObject | () | Methode |
public function denyRequestedObject(requestID:int):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 10.1, AIR 2 |
Lehnt eine Anforderung ab, die in NetStatusEvent NetGroup.Replication.Request
für ein zuvor mit addHaveObjects()
angebotenes Objekt empfangen wurde. Der Anforderer kann dieses Objekt erneut anfordern, sofern es nicht aus dem Have-Satz entfernt wird.
Weitere Informationen zur Objektreplizierung finden Sie unter „Replicate an object within a group“ im Flash Media Server Developer’s Guide.
HINWEIS: Prüfen Sie auf das NetGroup.Neighbor.Connect
-Ereignis, bevor Sie diese Methode aufrufen.
Parameter
requestID:int — Der Anforderungsbezeichner wie im NetGroup.Replication.Request -Ereignis angegeben.
|
Verwandte API-Elemente
post | () | Methode |
public function post(message:Object):String
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 10.1, AIR 2 |
Sendet eine Nachricht an alle Mitglieder einer Gruppe. Um diese Methode aufzurufen, muss die GroupSpecifier.postingEnabled
-Eigenschaft in der groupspec, die an den NetGroup-Konstruktor übergeben wird, auf true
gesetzt sein. Weitere Informationen finden Sie unter „Post messages to a group“ im Flash Media Server Developer’s Guide.
Alle Nachrichten müssen eindeutig sein. Eine Nachricht, die mit einer zuvor geposteten identisch ist, wird möglicherweise nicht weitergegeben. Verwenden Sie eine laufende Nummer, damit die Nachricht eindeutig ist.
Die Nachrichtenzustellung erfolgt nicht geordnet. Die Nachrichtenzustellung ist nicht garantiert.
Nachrichten werden in AMF serialisiert. Die Nachricht kann einen der folgenden Typen aufweisen: Object, int, Number oder String. Die Nachricht kann kein MovieClip sein.
Diese Methode sendet ein NetStatusEvent an den Ereignis-Listener von NetGroup mit "NetGroup.Posting.Notify"
in der info.code
-Eigenschaft. Das "NetGroup.Posting.Notify"
-Ereignis wird an die NetGroup auf dem Client und auf dem Server abgesetzt.
HINWEIS: Prüfen Sie auf das NetGroup.Neighbor.Connect
-Ereignis, bevor Sie diese Methode aufrufen.
Parameter
message:Object — Die Nachricht, die an alle anderen Mitglieder der Gruppe gesendet werden soll.
|
String — Die messageID der Nachricht, falls sie gepostet wurde, oder null bei einem Fehler. Die messageID ist der Hexadezimalwert des SHA256 der Grundbytes der Serialisierung der Nachricht.
|
Verwandte API-Elemente
Beispiel ( Verwendung dieses Beispiels )
Wenn Sie die Anwendung ausführen, können Sie einen beliebigen Gruppennamen in das Texteingabefeld eingeben. Die GroupSpecifier-Klasse verwendet den Namen (zusammen mit ggf. von Ihnen festgelegten GroupSpecifier-Eigenschaften), um einen String zu erstellen, der der ständige eindeutige Namen der Gruppe ist. Um einen anderen Client mit der Gruppe zu verbinden, muss dieser Client denselben Gruppennamen verwenden. Wenn zum Beispiel Client A den Gruppennamen „firstmesh“ verwendet, müssen andere Clients, die mit Client A kommunizieren möchten, auch den Gruppennamen „firstmesh“ verwenden. Wenn Client B den Gruppennamen „kite“ verwendet, wird zwar erfolgreich eine Verbindung hergestellt, es wird jedoch eine neue Gruppe erstellt und die Kommunikation mit Client A oder einem anderen Client in der Gruppe „firstmesh“ ist nicht möglich.
Um dieses Beispiel auszuführen, fügen Sie der Bibliothek in Flash Pro eine Button-, eine Label-, eine TextInput- und eine TextArea-Komponente hinzu.
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 | () | Methode |
public function removeHaveObjects(startIndex:Number, endIndex:Number):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 10.1, AIR 2 |
Entfernt Objekte von startIndex
bis endIndex
von den Objekten, die dieser Knoten den Nachbarn als Objekte anbietet, für die er Anforderungen erfüllt. Indizes müssen ganze Zahlen von 0 bis 9007199254740992 sein.
Weitere Informationen zur Objektreplizierung finden Sie unter „Replicate an object within a group“ im Flash Media Server Developer’s Guide.
HINWEIS: Prüfen Sie auf das NetGroup.Neighbor.Connect
-Ereignis, bevor Sie diese Methode aufrufen.
Parameter
startIndex:Number — Der Anfang des Bereichs der Objektindizes, die aus dem Have-Satz entfernt werden sollen.
| |
endIndex:Number — Das Ende des Bereichs der Objektindizes, die aus dem Have-Satz entfernt werden sollen.
|
Auslöser
RangeError — Eine Zahl, die an diese Methode übergeben wird, ist kleiner als 0 oder größer als 9007199254740992.
|
Verwandte API-Elemente
removeWantObjects | () | Methode |
public function removeWantObjects(startIndex:Number, endIndex:Number):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 10.1, AIR 2 |
Entfernt Objekte von startIndex
bis endIndex
aus dem Satz der abzurufenden Objekte. Indizes müssen ganze Zahlen von 0 bis 9007199254740992 sein.
Weitere Informationen zur Objektreplizierung finden Sie unter „Replicate an object within a group“ im Flash Media Server Developer’s Guide.
HINWEIS: Prüfen Sie auf das NetGroup.Neighbor.Connect
-Ereignis, bevor Sie diese Methode aufrufen.
Parameter
startIndex:Number — Der Anfang des Bereichs der Objektindizes, die aus dem Want-Satz entfernt werden sollen.
| |
endIndex:Number — Das Ende des Bereichs der Objektindizes, die aus dem Want-Satz entfernt werden sollen.
|
Auslöser
RangeError — Eine Zahl, die an diese Methode übergeben wird, ist kleiner als 0 oder größer als 9007199254740992.
|
Verwandte API-Elemente
sendToAllNeighbors | () | Methode |
public function sendToAllNeighbors(message:Object):String
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 10.1, AIR 2 |
Sendet eine Meldung an alle Nachbarn. Gibt NetGroupSendResult.SENT
zurück, wenn mindestens ein Nachbar ausgewählt wurde.
Weitere Informationen zum Weiterleiten von Nachrichten finden Sie unter „Route messages directly to a peer“ im Flash Media Server Developer’s Guide.
Wenn ein Knoten eine Nachricht empfängt, wird ein NetStatusEvent an den Ereignis-Listener von NetGroup mit NetGroup.SendTo.Notify
in der code
-Eigenschaft des info
-Objekts gesendet.
HINWEIS: Prüfen Sie auf das NetGroup.Neighbor.Connect
-Ereignis, bevor Sie diese Methode aufrufen.
Parameter
message:Object — Die zu sendende Meldung.
|
String — Eine Eigenschaft der Aufzählungsklasse NetGroupSendResult, die angibt, ob der Sendevorgang erfolgreich war oder fehlgeschlagen ist.
|
Verwandte API-Elemente
sendToNearest | () | Methode |
public function sendToNearest(message:Object, groupAddress:String):String
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 10.1, AIR 2 |
Sendet eine Meldung an den Nachbarn (oder lokalen Knoten), der der angegebenen Gruppenadresse am nächsten ist. Berücksichtigt Nachbarn aus dem gesamten Ring. Gibt NetGroupSendResult.SENT
zurück, wenn die Nachricht erfolgreich an ihr Ziel gesendet wurde.
Weitere Informationen zum Weiterleiten von Nachrichten finden Sie unter „Route messages directly to a peer“ im Flash Media Server Developer’s Guide.
Wenn ein Knoten eine Nachricht empfängt, wird ein NetStatusEvent an den Ereignis-Listener von NetGroup mit NetGroup.SendTo.Notify
in der code
-Eigenschaft des info
-Objekts gesendet.
HINWEIS: Prüfen Sie auf das NetGroup.Neighbor.Connect
-Ereignis, bevor Sie diese Methode aufrufen.
Parameter
message:Object — Die zu sendende Meldung.
| |
groupAddress:String — Die Gruppenadresse, an die die Nachricht geleitet werden soll.
|
String — Eine Eigenschaft der Aufzählungsklasse NetGroupSendResult, die angibt, ob der Sendevorgang erfolgreich war oder fehlgeschlagen ist.
|
Verwandte API-Elemente
sendToNeighbor | () | Methode |
public function sendToNeighbor(message:Object, sendMode:String):String
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 10.1, AIR 2 |
Sendet eine Nachricht an den Nachbarn, der vom sendMode
-Parameter angegeben wird. Gibt NetGroupSendResult.SENT
zurück, wenn die Nachricht erfolgreich an das angeforderte Ziel gesendet wurde.
Weitere Informationen zum Weiterleiten von Nachrichten finden Sie unter „Route messages directly to a peer“ im Flash Media Server Developer’s Guide.
Wenn ein Knoten eine Nachricht empfängt, wird ein NetStatusEvent an den Ereignis-Listener von NetGroup mit NetGroup.SendTo.Notify
in der code
-Eigenschaft des info
-Objekts gesendet.
HINWEIS: Prüfen Sie auf das NetGroup.Neighbor.Connect
-Ereignis, bevor Sie diese Methode aufrufen.
Parameter
message:Object — Die zu sendende Meldung.
| |
sendMode:String — Eine Eigenschaft der Aufzählungsklasse NetGroupSendMode, die den Nachbarn angibt, an den die Nachricht gesendet werden soll.
|
String — Eine Eigenschaft der Aufzählungsklasse NetGroupSendResult, die angibt, ob der Sendevorgang erfolgreich war oder fehlgeschlagen ist.
|
Verwandte API-Elemente
writeRequestedObject | () | Methode |
public function writeRequestedObject(requestID:int, object:Object):void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 10.1, AIR 2 |
Erfüllt die Anforderung wie von NetStatusEvent NetGroup.Replication.Request
empfangen für ein Objekt, das zuvor mit der addHaveObjects()
-Methode angeboten wurden. Das Objekt
kann einen der folgenden Typen aufweisen: Object, int, Number oder String. Das Objekt
kann kein MovieClip sein.
Weitere Informationen zur Objektreplizierung finden Sie unter „Replicate an object within a group“ im Flash Media Server Developer’s Guide.
HINWEIS: Prüfen Sie auf das NetGroup.Neighbor.Connect
-Ereignis, bevor Sie diese Methode aufrufen.
Parameter
requestID:int — Der Anforderungsbezeichner wie im NetGroup.Replication.Request -Ereignis angegeben.
| |
object:Object — Das Objekt, das dem Index entspricht, der im NetGroup.Replication.Request -Ereignis angegeben wurde.
|
Verwandte API-Elemente
netStatus | Ereignis |
flash.events.NetStatusEvent
Eigenschaft NetStatusEvent.type =
flash.events.NetStatusEvent.NET_STATUS
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 1.0, Flash Player 10.1 |
Wird abgesetzt, wenn der Status oder die Fehlerbedingung eines NetGroup-Objekts protokolliert wird. Das netStatus
-Ereignis enthält eine info
-Eigenschaft. Die info
-Eigenschaft ist ein Objekt mit Informationen über das Ereignis, z. B., ob ein Verbindungsversuch erfolgreich war oder fehlgeschlagen ist.
type
eines netStatus
-Ereignisobjekts.
Dieses Ereignis verfügt über die folgenden Eigenschaften:
Eigenschaft | Wert |
---|---|
bubbles | false |
cancelable | false . Es gibt kein Standardverhalten, das abgebrochen werden kann. |
currentTarget | Das Objekt, welches das Ereignisobjekt aktiv mit einem Ereignis-Listener verarbeitet. |
info | Ein Objekt mit Eigenschaften, die den Status oder die Fehlerbedingung des Objekts beschreiben. |
target | Das NetConnection- oder NetStream-Objekt, dessen Status protokolliert wird. |
Verwandte API-Elemente
Wenn Sie die Anwendung ausführen, können Sie einen beliebigen Gruppennamen in das Texteingabefeld eingeben. Die GroupSpecifier-Klasse verwendet den Namen (zusammen mit ggf. von Ihnen festgelegten GroupSpecifier-Eigenschaften), um einen String zu erstellen, der der ständige eindeutige Namen der Gruppe ist. Um einen anderen Client mit der Gruppe zu verbinden, muss dieser Client denselben Gruppennamen verwenden. Wenn zum Beispiel Client A den Gruppennamen „firstmesh“ verwendet, müssen andere Clients, die mit Client A kommunizieren möchten, auch den Gruppennamen „firstmesh“ verwenden. Wenn Client B den Gruppennamen „kite“ verwendet, wird zwar erfolgreich eine Verbindung hergestellt, es wird jedoch eine neue Gruppe erstellt und die Kommunikation mit Client A oder einem anderen Client in der Gruppe „firstmesh“ ist nicht möglich.
<?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, 10:04 AM Z