Package | flash.net |
Classe | public class NetGroup |
Héritage | NetGroup EventDispatcher Object |
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10.1, AIR 2 |
-
Contrôle de la qualité du service. La propriété
info
contient un objet NetGroupInfo dont les propriétés fournissent des statistiques de qualité de service pour ce groupe. -
Publication. Appelez
post()
pour diffuser des messages ActionScript à tous les membres d’un groupe. -
Routage direct. Appelez
sendToNearest()
,sendToNeighbor()
etsendToAllNeighbors()
pour envoyer un court message de données à un membre spécifique d’un groupe homologue à homologue. Il n’est pas nécessaire que la source et la destination aient une connexion directe. -
Réplication d’objets. Appelez
addHaveObjects()
,removeHaveObjects()
,addWantObjects()
,removeWantObjects()
,writeRequestedObject()
etdenyRequestedObject()
pour diviser les données volumineuses en plusieurs fragments et les reproduire dans tous les nœuds d’un groupe homologue à homologue.
Dans la classe NetGroup côté client, l’objet NetConnection distribue les événements suivants :
- NetGroup.Connect.Success
- NetGroup.Connect.Failed
- NetGroup.Connect.Rejected
La propriété info.group
de l’objet d’événement contient une référence à l’événement source (l’objet NetGroup). L’objet NetGroup distribue tous les autres événements. Dans la classe NetGroup côté serveur, l’objet NetGroup distribue tous les événements.
Pour plus d’informations sur l’utilisation de groupes avec la mise en réseau coopérative, voir le didacticiel Social Media Experiences with Flash Media and RTMFP, également par Tom Krcha (disponible en anglais uniquement).
Pour plus d’informations sur les détails techniques de la mise en réseau coopérative, voir le didacticiel P2P on the Flash Platform with RTMFP publié par l’informaticien d’Adobe, Matthieu Kaufman (disponible en anglais uniquement).
Eléments de l’API associés
flash.net.NetStream
Valeurs de flash.events.NetStatusEvent info.code commençant par "NetGroup."
Propriété | Défini par | ||
---|---|---|---|
constructor : Object
Référence à l’objet de classe ou à la fonction constructeur d’une occurrence donnée d’un objet. | Object | ||
estimatedMemberCount : Number [lecture seule]
Indique le nombre approximatif de membres du groupe, en fonction de la densité du voisinage et d’une distribution uniforme des adresses de groupe. | NetGroup | ||
info : NetGroupInfo [lecture seule]
Renvoie un objet NetGroupInfo dont les propriétés fournissent des statistiques de qualité de service (QoS) liées à la transmission de données RTMFP homologue à homologue de cet objet NetGroup. | NetGroup | ||
localCoverageFrom : String [lecture seule]
Spécifie le début de la plage d’adresses de groupe pour laquelle ce nœud est « le plus proche » et dont il est responsable. | NetGroup | ||
localCoverageTo : String [lecture seule]
Spécifie la fin de la plage d’adresses de groupe pour laquelle ce nœud est « le plus proche » et dont il est responsable. | NetGroup | ||
neighborCount : Number [lecture seule]
Indique le nombre de membres du groupe auxquels ce nœud est directement connecté. | NetGroup | ||
receiveMode : String
Spécifie le mode de réception de routage de ce nœud comme étant l’une des valeurs de la classe d’énumération NetGroupReceiveMode. | NetGroup | ||
replicationStrategy : String
Spécifie la stratégie d’extraction de la réplication d’objets. | NetGroup |
Méthode | Défini par | ||
---|---|---|---|
Construit un objet NetGroup sur l’objet NetConnection spécifié et le joint au groupe spécifié par le groupspec. | NetGroup | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Enregistre un objet écouteur d’événement auprès d’un objet EventDispatcher afin que l’écouteur soit averti d’un événement. | EventDispatcher | ||
Ajoute des objets depuis startIndex jusqu’à endIndex au jeu d’objets qui répondent aux demandes, comme l’indique ce nœud aux voisins. | NetGroup | ||
Ajoute manuellement un enregistrement indiquant que peerID est un membre du groupe. | NetGroup | ||
Ajoute manuellement un voisin en le connectant immédiatement au peerID spécifié, qui doit déjà se trouver dans ce groupe. | NetGroup | ||
Ajoute des objets depuis startIndex jusqu’à endIndex au jeu d’objets à extraire. | NetGroup | ||
Se déconnecte du groupe et ferme cet objet NetGroup. | NetGroup | ||
Convertit un ID homologue en une adresse de groupe pouvant être utilisée avec la méthode sendToNearest(). | NetGroup | ||
Refuse une demande reçue dans l’événement NetGroup.Replication.Request d’un NetStatusEvent pour un objet précédemment annoncé avec addHaveObjects(). | NetGroup | ||
Distribue un événement dans le flux d’événements. | EventDispatcher | ||
Vérifie si des écouteurs sont enregistrés auprès de l’objet EventDispatcher pour un type spécifique d’événement. | EventDispatcher | ||
Indique si la propriété spécifiée d’un objet est définie. | Object | ||
Indique si une occurrence de la classe Object figure dans la chaîne de prototype de l’objet spécifié en tant que paramètre. | Object | ||
Envoie un message à tous les membres d’un groupe. | NetGroup | ||
Indique si la propriété spécifiée existe et est énumérable. | Object | ||
Supprime un écouteur de l’objet EventDispatcher. | EventDispatcher | ||
Supprime des objets depuis startIndex jusqu’à endIndex du jeu d’objets qui répondent aux demandes, comme l’indique ce nœud aux voisins. | NetGroup | ||
Supprime des objets depuis startIndex jusqu’à endIndex du jeu d’objets à extraire. | NetGroup | ||
Envoie un message à tous les voisins. | NetGroup | ||
Envoie un message au voisin (ou au nœud local) le plus proche de l’adresse de groupe spécifiée. | NetGroup | ||
Envoie un message au voisin spécifié par le paramètre sendMode. | NetGroup | ||
Définit la disponibilité d’une propriété dynamique pour les opérations en boucle. | Object | ||
Renvoie la représentation de chaîne de cet objet, formatée selon les paramètres régionaux en vigueur. | Object | ||
Renvoie la représentation sous forme de chaîne de l’objet spécifié. | Object | ||
Renvoie la valeur primitive de l’objet spécifié. | Object | ||
Vérifie si un écouteur d’événement est enregistré auprès de cet objet EventDispatcher ou de ses ancêtres pour le type d’événement spécifié. | EventDispatcher | ||
Répond à la requête dès qu’elle est reçue par NetStatusEvent NetGroup.Replication.Request pour un objet précédemment annoncé via la méthode addHaveObjects(). | NetGroup |
Evénement | Synthèse | Défini par | ||
---|---|---|---|---|
[Evénement de diffusion] Distribué lorsque l’application Flash Player obtient le focus du système d’exploitation et devient active. | EventDispatcher | |||
[Evénement de diffusion] Distribué lorsque l’application Flash Player ou AIR perd le focus du système d’exploitation et devient inactive. | EventDispatcher | |||
Distribué lorsqu’un objet NetGroup publie son état ou signale une erreur. | NetGroup |
estimatedMemberCount | propriété |
estimatedMemberCount:Number
[lecture seule] Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10.1, AIR 2 |
Indique le nombre approximatif de membres du groupe, en fonction de la densité du voisinage et d’une distribution uniforme des adresses de groupe.
Implémentation
public function get estimatedMemberCount():Number
Eléments de l’API associés
info | propriété |
info:NetGroupInfo
[lecture seule] Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10.1, AIR 2 |
Renvoie un objet NetGroupInfo dont les propriétés fournissent des statistiques de qualité de service (QoS) liées à la transmission de données RTMFP homologue à homologue de cet objet NetGroup.
Implémentation
public function get info():NetGroupInfo
Eléments de l’API associés
localCoverageFrom | propriété |
localCoverageFrom:String
[lecture seule] Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10.1, AIR 2 |
Spécifie le début de la plage d’adresses de groupe pour laquelle ce nœud est « le plus proche » et dont il est responsable. La plage est spécifiée dans le sens ascendant le long de l’anneau d’adresses de groupe mod 2256.
Implémentation
public function get localCoverageFrom():String
Eléments de l’API associés
localCoverageTo | propriété |
localCoverageTo:String
[lecture seule] Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10.1, AIR 2 |
Spécifie la fin de la plage d’adresses de groupe pour laquelle ce nœud est « le plus proche » et dont il est responsable. La plage est spécifiée dans le sens ascendant le long de l’anneau d’adresses de groupe mod 2256.
Implémentation
public function get localCoverageTo():String
Eléments de l’API associés
neighborCount | propriété |
receiveMode | propriété |
receiveMode:String
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10.1, AIR 2 |
Spécifie le mode de réception de routage de ce nœud comme étant l’une des valeurs de la classe d’énumération NetGroupReceiveMode.
Implémentation
public function get receiveMode():String
public function set receiveMode(value:String):void
Eléments de l’API associés
replicationStrategy | propriété |
replicationStrategy:String
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10.1, AIR 2 |
Spécifie la stratégie d’extraction de la réplication d’objets. La valeur est l’une des valeurs énumérées dans la classe NetGroupReplicationStrategy.
Implémentation
public function get replicationStrategy():String
public function set replicationStrategy(value:String):void
Eléments de l’API associés
NetGroup | () | Constructeur |
public function NetGroup(connection:NetConnection, groupspec:String)
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10.1, AIR 2 |
Construit un objet NetGroup sur l’objet NetConnection spécifié et le joint au groupe spécifié par le groupspec
.
Dans la plupart des cas, un groupspec
peut utiliser la liaison montante du réseau sur le système local. Lorsqu’un objet NetStream ou NetGroup est construit avec un groupspec, Flash Player affiche une boîte de dialogue Confidentialité. Cette boîte de dialogue vous demande si Flash Player peut utiliser la connexion en vue de partager les données avec les homologues d’un utilisateur. Si l’utilisateur clique sur « Autoriser ce domaine », la boîte de dialogue n’apparaît pas la prochaine fois que l’utilisateur se connecte à cette application. Si un utilisateur n’autorise pas la mise en réseau coopérative, toutes les fonctions d’homologue dans le groupe (publication, routage direct, réplication d’objets et multidiffusion) sont désactivées. Si l’autorisation est accordée, un événement NetStatusEvent est envoyé à l’écouteur d’événement de NetConnection avec NetGroup.Connect.Success
dans la propriété code
de l’objet info
. Si l’autorisation est refusée, la propriété code
est définie sur NetGroup.Connect.Rejected
. Tant qu’un événement NetGroup.Connect.Success
n’est pas reçu, une exception est renvoyée si vous tentez d’appeler une méthode de l’objet NetGroup.
Remarque : lorsqu’un client s’abonne au flux en multidiffusion d’une adresse IP native, la boîte de dialogue de sécurité n’est pas affichée.
Paramètresconnection:NetConnection — Objet NetConnection.
| |
groupspec:String — Chaîne spécifiant le groupe RTMFP homologue à homologue auquel se joindre, y compris son nom, ses fonctionnalités et ses restrictions, ainsi que les autorisations de ce membre.
new NetGroup(myConnection, myGroupSpecifier.groupspecWithAuthorizations()); |
Valeur émise
ArgumentError — L’occurrence de NetConnection n’est pas connectée.
| |
Error — Le spécificateur de groupe n’est pas valide.
|
Eléments de l’API associés
addHaveObjects | () | méthode |
public function addHaveObjects(startIndex:Number, endIndex:Number):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10.1, AIR 2 |
Ajoute des objets depuis startIndex
jusqu’à endIndex
au jeu d’objets qui répondent aux demandes, comme l’indique ce nœud aux voisins. Par défaut, le jeu Have est vide. Les index doivent être des nombres entiers compris entre 0 et 9 007 199 254 740 992.
Pour plus d’informations sur la réplication d’objets, voir la section "Replicate an object within a group" du guide Flash Media Server Developer’s Guide.
Cette méthode envoie un événement NetStatusEvent à l’écouteur d’événement de NetGroup avec "NetGroup.Replication.Request"
dans la propriété code
de l’objet info
.
REMARQUE : testez l’événement NetGroup.Neighbor.Connect
avant d’appeler cette méthode.
Paramètres
startIndex:Number — Début de la plage d’index de l’objet à ajouter au jeu Have.
| |
endIndex:Number — Fin de la plage d’index de l’objet à ajouter au jeu Have.
|
Valeur émise
RangeError — Un nombre transmis à cette méthode est inférieur à 0 ou supérieur à 9007199254740992.
|
Eléments de l’API associés
addMemberHint | () | méthode |
public function addMemberHint(peerID:String):Boolean
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10.1, AIR 2 |
Ajoute manuellement un enregistrement indiquant que peerID
est un membre du groupe. Une tentative de connexion immédiate est effectuée uniquement si la topologie le requiert.
Paramètres
peerID:String — ID homologue à ajouter au jeu de voisins potentiels.
|
Boolean — TRUE pour une réussite, FALSE pour un échec.
|
Eléments de l’API associés
addNeighbor | () | méthode |
public function addNeighbor(peerID:String):Boolean
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10.1, AIR 2 |
Ajoute manuellement un voisin en le connectant immédiatement au peerID
spécifié, qui doit déjà se trouver dans ce groupe. Cette connexion directe peut être abandonnée ultérieurement si la topologie n’en a pas besoin.
Paramètres
peerID:String — L’ID homologue auquel se connecter immédiatement.
|
Boolean — TRUE pour une réussite, FALSE pour un échec.
|
Eléments de l’API associés
addWantObjects | () | méthode |
public function addWantObjects(startIndex:Number, endIndex:Number):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10.1, AIR 2 |
Ajoute des objets depuis startIndex
jusqu’à endIndex
au jeu d’objets à extraire. Les index doivent être des nombres entiers compris entre 0 et 9 007 199 254 740 992. Par défaut, le jeu Want est vide.
Pour plus d’informations sur la réplication d’objets, voir la section "Replicate an object within a group" du guide Flash Media Server Developer’s Guide.
Cette méthode envoie un événement NetStatusEvent à l’écouteur d’événement de NetGroup avec NetGroup.Replication.Fetch.SendNotify
dans la propriété info.code
. Cet événement est suivi d’un événement NetGroup.Replication.Fetch.Failed
ou NetGroup.Replication.Fetch.Result
.
REMARQUE : testez l’événement NetGroup.Neighbor.Connect
avant d’appeler cette méthode.
Paramètres
startIndex:Number — Début de la plage d’index d’objets à ajouter au jeu Want.
| |
endIndex:Number — Fin de la plage d’index d’objets à ajouter au jeu Want.
|
Valeur émise
RangeError — Un nombre transmis à cette méthode est inférieur à 0 ou supérieur à 9007199254740992.
|
Eléments de l’API associés
close | () | méthode |
public function close():void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10.1, AIR 2 |
Se déconnecte du groupe et ferme cet objet NetGroup. Il est impossible d’utiliser cet objet NetGroup après l’appel de cette méthode.
convertPeerIDToGroupAddress | () | méthode |
public function convertPeerIDToGroupAddress(peerID:String):String
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10.1, AIR 2 |
Convertit un ID homologue en une adresse de groupe pouvant être utilisée avec la méthode sendToNearest()
.
Paramètres
peerID:String — ID homologue à convertir.
|
String — Adresse de groupe pour l’ID homologue.
|
Eléments de l’API associés
denyRequestedObject | () | méthode |
public function denyRequestedObject(requestID:int):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10.1, AIR 2 |
Refuse une demande reçue dans l’événement NetGroup.Replication.Request
d’un NetStatusEvent pour un objet précédemment annoncé avec addHaveObjects()
. Le demandant peut solliciter à nouveau cet objet à moins (ou jusqu’à ce) qu’il ne soit retiré du jeu Have.
Pour plus d’informations sur la réplication d’objets, voir la section "Replicate an object within a group" du guide Flash Media Server Developer’s Guide.
REMARQUE : testez l’événement NetGroup.Neighbor.Connect
avant d’appeler cette méthode.
Paramètres
requestID:int — Identifiant de la demande, tel qu’indiqué dans l’événement NetGroup.Replication.Request .
|
Eléments de l’API associés
post | () | méthode |
public function post(message:Object):String
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10.1, AIR 2 |
Envoie un message à tous les membres d’un groupe. Pour appeler cette méthode, la propriété GroupSpecifier.postingEnabled
doit être définie sur true
dans le groupspec transmis au constructeur de NetGroup. Pour plus d’informations, voir la section "Post messages to a group" du guide Flash Media Server Developer’s Guide.
Tous les messages doivent être uniques. Il est impossible de transmettre un message identique à l’un des messages envoyés précédemment. Utilisez un numéro de séquence pour rendre les messages uniques.
La remise des messages n’est pas préconisée. La remise des messages n’est pas garantie.
Les messages sont sérialisés au format AMF. Le message peut être de l’un des types suivants : Object, int, Number ou String. Le message ne peut pas être un objet MovieClip.
Cette méthode envoie un événement NetStatusEvent à l’écouteur d’événement de NetGroup avec "NetGroup.Posting.Notify"
dans la propriété info.code
. L’événement "NetGroup.Posting.Notify"
est distribué à l’objet NetGroup sur le client et sur le serveur.
REMARQUE : testez l’événement NetGroup.Neighbor.Connect
avant d’appeler cette méthode.
Paramètres
message:Object — Message à envoyer à tous les autres membres du groupe.
|
String — L’ID de message correspondant au message, s’il est publié, ou null en cas d’erreur. L’ID de message est le code hexadécimal de l’algorithme SHA256 d’octets bruts de la sérialisation du message.
|
Eléments de l’API associés
Exemple ( Comment utiliser cet exemple )
Lorsque vous exécutez l’application, vous pouvez indiquer n’importe quel nom de groupe dans le champ de saisie de texte. La classe GroupSpecifier utilise le nom (ainsi que toutes les propriétés que vous avez définies) pour créer une chaîne qui est le nom toujours unique du groupe. Pour connecter un autre client au groupe, ce client doit utiliser le même nom de groupe. Par exemple, si le client A utilise le nom de groupe « firstmesh », les autres clients qui souhaitent communiquer avec le client A doivent également utiliser le nom de groupe « firstmesh ». Si le client B utilise le nom de groupe « kite », il parviendra à se connecter, mais il créera un nouveau groupe et ne sera pas en mesure de communiquer avec le client A ou les membres du groupe « firstmesh ».
Pour exécuter cet exemple, ajoutez un composant Button, Label, TextInput et TextArea à la bibliothèque dans 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 | () | méthode |
public function removeHaveObjects(startIndex:Number, endIndex:Number):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10.1, AIR 2 |
Supprime des objets depuis startIndex
jusqu’à endIndex
du jeu d’objets qui répondent aux demandes, comme l’indique ce nœud aux voisins. Les index doivent être des nombres entiers compris entre 0 et 9 007 199 254 740 992.
Pour plus d’informations sur la réplication d’objets, voir la section "Replicate an object within a group" du guide Flash Media Server Developer’s Guide.
REMARQUE : testez l’événement NetGroup.Neighbor.Connect
avant d’appeler cette méthode.
Paramètres
startIndex:Number — Début de la plage d’index d’objets à supprimer du jeu Have.
| |
endIndex:Number — Fin de la plage d’index d’objets à supprimer du jeu Have.
|
Valeur émise
RangeError — Un nombre transmis à cette méthode est inférieur à 0 ou supérieur à 9007199254740992.
|
Eléments de l’API associés
removeWantObjects | () | méthode |
public function removeWantObjects(startIndex:Number, endIndex:Number):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10.1, AIR 2 |
Supprime des objets depuis startIndex
jusqu’à endIndex
du jeu d’objets à extraire. Les index doivent être des nombres entiers compris entre 0 et 9 007 199 254 740 992.
Pour plus d’informations sur la réplication d’objets, voir la section "Replicate an object within a group" du guide Flash Media Server Developer’s Guide.
REMARQUE : testez l’événement NetGroup.Neighbor.Connect
avant d’appeler cette méthode.
Paramètres
startIndex:Number — Début de la plages d’index d’objets à supprimer du jeu Want.
| |
endIndex:Number — Fin de la plages d’index d’objets à supprimer du jeu Want.
|
Valeur émise
RangeError — Un nombre transmis à cette méthode est inférieur à 0 ou supérieur à 9007199254740992.
|
Eléments de l’API associés
sendToAllNeighbors | () | méthode |
public function sendToAllNeighbors(message:Object):String
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10.1, AIR 2 |
Envoie un message à tous les voisins. Renvoie NetGroupSendResult.SENT
si au moins un voisin a été sélectionné.
Pour plus d’informations sur l’acheminement des messages, voir la section "Route messages directly to a peer" du guide Flash Media Server Developer’s Guide.
Lorsqu’un nœud reçoit un message, un événement NetStatusEvent est envoyé à l’écouteur d’événement de NetGroup avec NetGroup.SendTo.Notify
dans la propriété code
de l’objet info
.
REMARQUE : testez l’événement NetGroup.Neighbor.Connect
avant d’appeler cette méthode.
Paramètres
message:Object — Message à envoyer.
|
String — Propriété de la classe d’énumération NetGroupSendResult indiquant la réussite ou l’échec de l’envoi.
|
Eléments de l’API associés
sendToNearest | () | méthode |
public function sendToNearest(message:Object, groupAddress:String):String
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10.1, AIR 2 |
Envoie un message au voisin (ou au nœud local) le plus proche de l’adresse de groupe spécifiée. Prend en compte les voisins de l’ensemble de l’anneau. Renvoie NetGroupSendResult.SENT
si le message a été correctement envoyé vers sa destination.
Pour plus d’informations sur l’acheminement des messages, voir la section "Route messages directly to a peer" du guide Flash Media Server Developer’s Guide.
Lorsqu’un nœud reçoit un message, un événement NetStatusEvent est envoyé à l’écouteur d’événement de NetGroup avec NetGroup.SendTo.Notify
dans la propriété code
de l’objet info
.
REMARQUE : testez l’événement NetGroup.Neighbor.Connect
avant d’appeler cette méthode.
Paramètres
message:Object — Message à envoyer.
| |
groupAddress:String — Adresse de groupe vers laquelle diriger le message.
|
String — Propriété de la classe d’énumération NetGroupSendResult indiquant la réussite ou l’échec de l’envoi.
|
Eléments de l’API associés
sendToNeighbor | () | méthode |
public function sendToNeighbor(message:Object, sendMode:String):String
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10.1, AIR 2 |
Envoie un message au voisin spécifié par le paramètre sendMode
. Renvoie NetGroupSendResult.SENT
si le message a été correctement envoyé vers la destination requise.
Pour plus d’informations sur l’acheminement des messages, voir la section "Route messages directly to a peer" du guide Flash Media Server Developer’s Guide.
Lorsqu’un nœud reçoit un message, un événement NetStatusEvent est envoyé à l’écouteur d’événement de NetGroup avec NetGroup.SendTo.Notify
dans la propriété code
de l’objet info
.
REMARQUE : testez l’événement NetGroup.Neighbor.Connect
avant d’appeler cette méthode.
Paramètres
message:Object — Message à envoyer.
| |
sendMode:String — Propriété de la classe d’énumération NetGroupSendMode spécifiant le voisin auquel envoyer le message.
|
String — Propriété de la classe d’énumération NetGroupSendResult indiquant la réussite ou l’échec de l’envoi.
|
Eléments de l’API associés
writeRequestedObject | () | méthode |
public function writeRequestedObject(requestID:int, object:Object):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10.1, AIR 2 |
Répond à la demande dès sa réception par NetGroup.Replication.Request
de NetStatusEvent pour un objet précédemment annoncé avec la méthode addHaveObjects()
. L’objet
peut être de l’un des types suivants : Object, int, Number et String. L’objet
ne peut pas être un objet MovieClip.
Pour plus d’informations sur la réplication d’objets, voir la section "Replicate an object within a group" du guide Flash Media Server Developer’s Guide.
REMARQUE : testez l’événement NetGroup.Neighbor.Connect
avant d’appeler cette méthode.
Paramètres
requestID:int — Identifiant de la demande, tel qu’indiqué dans l’événement NetGroup.Replication.Request .
| |
object:Object — Objet correspondant à l’index fourni dans l’événement NetGroup.Replication.Request .
|
Eléments de l’API associés
netStatus | Evénement |
flash.events.NetStatusEvent
propriété NetStatusEvent.type =
flash.events.NetStatusEvent.NET_STATUS
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | AIR 1.0, Flash Player 10.1 |
Distribué lorsqu’un objet NetGroup publie son état ou signale une erreur. L’événement netStatus
contient une propriété info
. La propriété info
est un objet qui contient des informations sur l’événement, telles que la réussite ou l’échec d’une tentative de connexion.
type
d’un objet d’événement netStatus
.
Les propriétés de cet événement sont les suivantes :
Propriété | Valeur |
---|---|
bubbles | false |
cancelable | false ; il n’existe aucun comportement par défaut à annuler. |
currentTarget | L’objet qui traite activement l’objet Event avec un écouteur d’événements. |
info | Objet associé à des propriétés décrivant son état ou indiquant une erreur. |
target | Objet NetConnection ou NetStream publiant son état. |
Eléments de l’API associés
Lorsque vous exécutez l’application, vous pouvez indiquer n’importe quel nom de groupe dans le champ de saisie de texte. La classe GroupSpecifier utilise le nom (ainsi que toutes les propriétés que vous avez définies) pour créer une chaîne qui est le nom toujours unique du groupe. Pour connecter un autre client au groupe, ce client doit utiliser le même nom de groupe. Par exemple, si le client A utilise le nom de groupe « firstmesh », les autres clients qui souhaitent communiquer avec le client A doivent également utiliser le nom de groupe « firstmesh ». Si le client B utilise le nom de groupe « kite », il parviendra à se connecter, mais il créera un nouveau groupe et ne sera pas en mesure de communiquer avec le client A ou les membres du groupe « 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, 09:30 AM Z