Guide de référence ActionScript® 3.0 pour la plate-forme Adobe® Flash®
Accueil  |  Masquer la liste des packages et des classes |  Packages  |  Classes  |  Nouveautés  |  Index  |  Annexes  |  Pourquoi existe-t-il du contenu en anglais ?
Filtres : Récupération des données du serveur...
Récupération des données du serveur...
flash.system 

MessageChannel  - AS3

Packageflash.system
Classepublic final class MessageChannel
HéritageMessageChannel Inheritance EventDispatcher Inheritance Object

Version du langage: ActionScript 3.0
Versions du moteur d’exécution: Flash Player 11.4, AIR 3.4

La classe MessageChannel fournit un mécanisme permettant à un programme de travail de communiquer avec un autre programme de travail. Un canal de message est un canal de communication unidirectionnel. Le programme de travail d’envoi utilise le canal de message pour envoyer des objets à un programme de travail de réception. Un objet MessageChannel, qui est l’unique moyen d’envoyer un message entre programmes de travail, distribue un événement indiquant au récepteur que le message est disponible. D’autres mécanismes de partage de données permettent de définir une valeur, mais ne fournissent aucun événement pour vous informer que les données ont changé.

Chaque objet MessageChannel contient une file d’attente des objets de message que le programme de travail envoie au programme de travail de réception. Chaque appel de la méthode send() ajoute un objet à la file d’attente. Chaque appel de la méthode receive() extrait l’objet de message le plus ancien de la file d’attente.

Vous ne pouvez pas créer d’occurrences de MessageChannel directement en appelant le constructeur MessageChannel(). Pour créer une occurrence de l’objet MessageChannel, appelez la méthode createMessageChannel() de l’objet Worker qui enverra des messages sur le canal, en transmettant l’objet Worker de réception en tant qu’argument.

La procédure standard pour envoyer des messages avec un objet MessageChannel est la suivante :

  1. Appelez la méthode createMessageChannel() du programme de travail d’envoi en vue de créer le canal de message.

        // In the sending worker swf
        var sendChannel:MessageChannel;
        sendChannel = Worker.current.createMessageChannel(receivingWorker);
  2. Transmettez le canal de message à l’autre programme de travail, soit en appelant la méthode Worker.setSharedProperty(), soit en l’envoyant via un canal de message existant.

        receivingWorker.setSharedProperty("incomingChannel", sendChannel);
  3. Le code dans le programme de travail de réception enregistre un écouteur avec l’objet MessageChannel pour l’événement channelMessage.

        // In the receiving worker swf
        var incomingChannel:MessageChannel;
        incomingChannel = Worker.current.getSharedProperty("incomingChannel");
        incomingChannel.addEventListener(Event.CHANNEL_MESSAGE, handleIncomingMessage);
  4. Le code dans le programme de travail d’envoi envoie un message en appelant la méthode send().

        // In the sending worker swf
        sendChannel.send("This is a message");
  5. Le moteur d’exécution appelle le gestionnaire d’événement dans le code du programme de travail de réception en indiquant qu’un message a été envoyé.

        // In the receiving worker swf
        // This method is called when the message channel gets a message
        private function handleIncomingMessage(event:Event):void
        {
            // Do something with the message, as shown in the next code listing
        }
  6. Le code dans le programme de travail de réception appelle la méthode receive() pour obtenir le message. L’objet renvoyé par la méthode receive() possède le même type de données que l’objet transmis dans la méthode send().

        var message:String = incomingChannel.receive() as String;

Outre la procédure asynchrone décrite ci-dessus, vous pouvez utiliser une procédure alternative avec la méthode receive() pour interrompre le code dans le programme de travail de réception et attendre que le message soit envoyé. Voir la description de la méthodereceive() pour plus d’informations.

La classe MessageChannel est l’un des types d’objets spéciaux qui sont partagés (et non copiés) entre les programmes de travail. Lorsque vous transmettez un canal de message d’un programme de travail à un autre, soit en appelant la méthode setSharedProperty() de l’objet Worker, soit en utilisant un objet MessageChannel, les deux programmes de travail possèdent une référence au même objet MessageChannel dans la mémoire du moteur d’exécution.

Eléments de l’API associés



Propriétés publiques
 PropriétéDéfini par
 Inheritedconstructor : Object
Référence à l’objet de classe ou à la fonction constructeur d’une occurrence donnée d’un objet.
Object
  messageAvailable : Boolean
[lecture seule] Indique si la file d’attente interne du canal de message contient un ou plusieurs messages envoyés par le programme de travail.
MessageChannel
  state : String
[lecture seule] Indique l’état actuel de l’objet MessageChannel (ouvert, en cours de fermeture ou fermé).
MessageChannel
Méthodes publiques
 MéthodeDéfini par
  
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
[override] Enregistre un objet écouteur d’événement auprès d’un objet EventDispatcher afin que l’écouteur soit averti d’un événement.
MessageChannel
  
Demande au canal de message actuel de se fermer une fois tous les messages reçus.
MessageChannel
 Inherited
Distribue un événement dans le flux d’événements.
EventDispatcher
 Inherited
Vérifie si des écouteurs sont enregistrés auprès de l’objet EventDispatcher pour un type spécifique d’événement.
EventDispatcher
 Inherited
Indique si la propriété spécifiée d’un objet est définie.
Object
 Inherited
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
 Inherited
Indique si la propriété spécifiée existe et est énumérable.
Object
  
receive(blockUntilReceived:Boolean = false):*
Extrait un seul objet de message de la file d’attente des messages envoyés via ce canal de message.
MessageChannel
  
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
[override] Supprime un écouteur de l’objet EventDispatcher.
MessageChannel
  
send(arg:*, queueLimit:int = -1):void
Envoie un objet depuis le programme de travail d’envoi et l’ajoute à la file d’attente des messages pour le programme de travail de réception.
MessageChannel
 Inherited
Définit la disponibilité d’une propriété dynamique pour les opérations en boucle.
Object
 Inherited
Renvoie la représentation de chaîne de cet objet, formatée selon les paramètres régionaux en vigueur.
Object
  
[override] Renvoie la représentation sous forme de chaîne de l’objet spécifié.
MessageChannel
 Inherited
Renvoie la valeur primitive de l’objet spécifié.
Object
 Inherited
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
Evénements
 Evénement Synthèse Défini par
 Inherited[Evénement de diffusion] Distribué lorsque l’application Flash Player obtient le focus du système d’exploitation et devient active.EventDispatcher
  Distribué chaque fois que le programme de travail d’envoi appelle la méthode send() de cet objet MessageChannel en indiquant qu’un nouvel objet de message est disponible dans la file d’attente de l’occurrence de MessageChannel.MessageChannel
  Distribué lorsque la valeur de la propriété state du canal de message change.MessageChannel
 Inherited[Evénement de diffusion] Distribué lorsque l’application Flash Player ou AIR perd le focus du système d’exploitation et devient inactive.EventDispatcher
Détails de la propriété

messageAvailable

propriété
messageAvailable:Boolean  [lecture seule]

Version du langage: ActionScript 3.0
Versions du moteur d’exécution: Flash Player 11.4, AIR 3.4

Indique si la file d’attente interne du canal de message contient un ou plusieurs messages envoyés par le programme de travail.



Implémentation
    public function get messageAvailable():Boolean

state

propriété 
state:String  [lecture seule]

Version du langage: ActionScript 3.0
Versions du moteur d’exécution: Flash Player 11.4, AIR 3.4

Indique l’état actuel de l’objet MessageChannel (ouvert, en cours de fermeture ou fermé). Les valeurs possibles de cette propriété sont définies en tant que constantes dans la classe MessageChannelState.



Implémentation
    public function get state():String

Eléments de l’API associés

Détails de la méthode

addEventListener

()méthode
override public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void

Version du langage: ActionScript 3.0
Versions du moteur d’exécution: Flash Player 11.4, AIR 3.4

Enregistre un objet écouteur d’événement auprès d’un objet EventDispatcher afin que l’écouteur soit averti d’un événement. Vous pouvez enregistrer les écouteurs d’événement dans tous les nœuds de la liste d’affichage pour un type spécifique d’événement, de phase et de priorité.

Après l’enregistrement d’un écouteur d’événement, vous ne pouvez plus modifier sa priorité par d’autres appels de addEventListener(). Pour modifier la priorité d’un écouteur, vous devez d’abord appeler removeListener(). Vous pouvez ensuite réenregistrer l’écouteur avec le nouveau niveau de priorité.

N’oubliez pas qu’une fois l’écouteur enregistré, tous les prochains appels de addEventListener() avec une valeur type ou useCapture différente entraîneront la création d’un autre enregistrement d’écouteur. Si, par exemple, vous enregistrez un écouteur dans lequel la propriété useCapture est définie sur true, il écoute uniquement pendant la phase de capture. Si vous appelez addEventListener() à l’aide du même objet écouteur, mais en définissant useCapture sur false, vous obtenez deux écouteurs distincts : l’un qui écoute pendant la phase de capture et l’autre qui écoute pendant les phases cible et de propagation vers le haut (bubbling).

Il est impossible d’enregistrer un écouteur d’événement uniquement pour la phase cible ou la phase de propagation vers le haut. Ces deux phases sont associées pendant l’enregistrement car la propagation vers le haut s’applique uniquement aux ancêtres du nœud cible.

Si vous n’avez plus besoin d’un écouteur d’événements, supprimez-le en appelant removeEventListener(), afin d’éviter tout problème de mémoire. Les écouteurs d’événement ne sont pas automatiquement supprimés de la mémoire, car le nettoyeur de mémoire ne supprime pas l’écouteur tant que l’objet de distribution existe (à moins que le paramètre useWeakReference ne soit défini sur true).

Lors de la copie d’une occurrence d’EventDispatcher, les écouteurs d’événement qui lui sont associés ne sont pas pris en compte (si le nouveau nœud nécessite un écouteur d’événement, vous devez associer celui-ci après la création du nœud). Toutefois, si vous déplacez une occurrence d’EventDispatcher, les écouteurs d’événement qui lui sont associés la suivent.

Si un écouteur d’événement est enregistré sur un nœud alors qu’un événement est en cours de traitement sur ce nœud, l’écouteur n’est pas déclenché pendant la phase actuelle, mais il peut l’être pendant une phase ultérieure du flux d’événements, telle que la phase de propagation vers le haut (bubbling).

Si un écouteur d’événement est supprimé d’un nœud sur lequel un événement est en cours de traitement, il est cependant déclenché par les actions en cours. Une fois supprimé, l’écouteur d’événement n’est plus jamais appelé (à moins d’être réenregistré à des fins de traitement ultérieur).

Paramètres

type:String — Type d’événement.
 
listener:Function — Fonction d’auditeur qui traite l’événement. Cette fonction doit accepter un objet Event comme paramètre unique et ne rien renvoyer, comme illustré ci-dessous :
function(evt:Event):void

Le nom de cette fonction n’a aucune importance.

 
useCapture:Boolean (default = false)Détermine si l’écouteur est actif pendant la phase de capture ou pendant les phases cible et de propagation. Si la propriété useCapture est définie sur true, l’écouteur traite l’événement uniquement pendant la phase de capture et non pendant les phases cible et de propagation. Si la propriété useCapture est définie sur false, l’écouteur traite l’événement uniquement pendant les phases cible et de propagation. Pour écouter l’événement dans les trois phases, appelez addEventListener à deux reprises, une première fois en définissant useCapture sur true, puis une nouvelle fois en définissant useCapture sur false.
 
priority:int (default = 0) — Niveau de priorité de l’écouteur d’événement. La priorité est indiquée par un entier signé de 32 bits. Plus le nombre est élevé, plus la priorité est élevée. Tous les écouteurs dont la priorité correspond à n sont traités avant les écouteurs dotés de la priorité n -1. Les écouteurs dont la priorité est identique sont traités dans l’ordre où ils ont été ajoutés. La priorité par défaut est 0.
 
useWeakReference:Boolean (default = false) — Détermine si la référence à l’écouteur est forte ou faible. Une référence forte (valeur par défaut) empêche le nettoyage de votre écouteur, Cela n’est pas le cas avec une référence faible.

Les fonctions de membres de niveau classe n’étant pas soumises au nettoyage, vous pouvez définir useWeakReference sur true pour ces fonctions. Si vous définissez useWeakReference sur true pour un écouteur correspondant à une fonction imbriquée interne, la fonction sera nettoyée et ne sera donc pas permanente. Si vous créez des références à la fonction interne (enregistrée dans une autre variable), celle-ci n’est pas nettoyée et reste permanente.

close

()méthode 
public function close():void

Version du langage: ActionScript 3.0
Versions du moteur d’exécution: Flash Player 11.4, AIR 3.4

Demande au canal de message actuel de se fermer une fois tous les messages reçus.

Une fois que vous appelez cette méthode, vous ne pouvez plus appeler la méthode send() pour ajouter des messages à la file d’attente. L’appel de la méthode send() échouera et renverra false.

Par ailleurs, vous pouvez uniquement appeler la méthode receive() pour recevoir les messages déjà en attente dans la file d’attente. Si la file d’attente est vide, l’appel de la méthode receive() renvoie null.


Evénements
channelState:Event — distribué lors de l’appel de la méthode close() (qui définit la propriété state sur MessageChannelState.CLOSING). Distribué à nouveau lorsque tous les messages ont été reçus et que la propriété state est définie sur MessageChannelState.CLOSED.

receive

()méthode 
public function receive(blockUntilReceived:Boolean = false):*

Version du langage: ActionScript 3.0
Versions du moteur d’exécution: Flash Player 11.4, AIR 3.4

Extrait un seul objet de message de la file d’attente des messages envoyés via ce canal de message.

Chaque fois que le code du programme de travail d’envoi appelle la méthode send() de l’objet MessageChannel, un seul objet est ajouté à la file d’attente interne du canal de message. Ces objets s’empilent dans la file d’attente jusqu’à ce qu’ils soient supprimés un par un par le programme de travail de réception qui appelle la méthode receive(). Les objets de message sont reçus dans l’ordre où ils sont envoyés.

Pour vérifier si la file d’attente contient un objet de message à recevoir, utilisez la propriété messageAvailable.

Dans un cas standard, l’objet transmis à la méthode send() est sérialisé au format AMF3. Lorsqu’il est supprimé de la file d’attente par l’appel de la méthode receive(), il est désérialisé en objet ActionScript (copie de l’objet d’origine) dans le programme de travail de réception, et le programme de travail reçoit une référence à cette copie. Certains types d’objets sont partagés entre programmes de travail au lieu d’être copiés. Dans ce cas, l’objet que le programme de travail de réception reçoit est une référence à l’objet partagé proprement dit et non une nouvelle copie de l’objet. Pour plus d’informations sur ce cas, voir la description de la méthode send().

Le comportement de la méthode change si la file d’attente des messages est vide et si vous transmettez la valeur true au paramètre blockUntilReceived. Dans ce cas, le programme de travail interrompt son thread d’exécution lors de l’appel de la méthode receive() et cesse d’exécuter le code. Dès que le programme de travail d’envoi appelle la méthode send(), l’appel de la méthode receive() se termine par la réception du message. Le programme de travail reprend alors l’exécution du code à partir de la ligne de code qui suit l’appel de réception.

Paramètres

blockUntilReceived:Boolean (default = false) — indique si le thread d’exécution du programme de travail doit recevoir un objet de message et poursuivre l’exécution (false), ou s’il doit s’interrompre à l’appel de la méthode receive() et attendre l’envoi d’un message si la file d’attente est vide (true)

Valeur renvoyée
* — copie de l’objet transmis à la méthode send() par le programme de travail d’envoi. Si l’objet est de l’un des types spéciaux qui sont partagés entre les programmes de travail, la valeur renvoyée est une référence à l’objet partagé plutôt qu’une copie de celui-ci. Si aucun message n’est disponible dans la file d’attente, la méthode renvoie null.

Valeur émise
IOError — si le canal est fermé au moment de l’appel de la méthode ou si l’argument blockUntilReceived entraîne l’interruption de l’exécution et la fermeture du canal par un autre programme de travail
 
ArgumentError — si le code d’appel ne se trouve pas dans le programme de travail de réception
 
ScriptTimeoutError — si la méthode est appelée à partir du code du programme de travail primordial dans Flash Player et que l’argument blockUntilReceived entraîne l’interruption du programme de travail pendant une durée supérieure au délai d’expiration du script (15 secondes par défaut)

Eléments de l’API associés

removeEventListener

()méthode 
override public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void

Version du langage: ActionScript 3.0
Versions du moteur d’exécution: Flash Player 11.4, AIR 3.4

Supprime un écouteur de l’objet EventDispatcher. Si aucun écouteur correspondant n’est enregistré auprès de l’objet EventDispatcher, l’appel de cette méthode n’a aucun effet.

Paramètres

type:String — Type d’événement.
 
listener:Function — Objet écouteur à supprimer.
 
useCapture:Boolean (default = false)Détermine si l’écouteur a été enregistré pendant la phase de capture ou pendant les phases cible et de propagation. Si l’écouteur a été enregistré pendant la phase de capture et pendant les phases cible et de propagation, il est nécessaire d’appeler removeEventListener() à deux reprises pour le supprimer. Appelez useCapture() une première fois en la définissant sur true, puis une seconde fois useCapture() en la définissant sur false.

send

()méthode 
public function send(arg:*, queueLimit:int = -1):void

Version du langage: ActionScript 3.0
Versions du moteur d’exécution: Flash Player 11.4, AIR 3.4

Envoie un objet depuis le programme de travail d’envoi et l’ajoute à la file d’attente des messages pour le programme de travail de réception.

Vous pouvez transmettre pratiquement n’importe quel objet au paramètre arg. Sauf dans les cas exceptionnels décrits ci-dessous, tous les objets transmis au paramètre arg ne sont pas transmis par référence. Toutes les modifications apportées à l’objet dans un programme de travail après l’appel de la méthode send() ne sont pas appliquées à l’autre programme de travail. L’objet est copié en le sérialisant au format AMF3 et en le désérialisant en nouvel objet dans le programme de travail de réception lors de l’appel de la méthode receive(). Pour cette raison, les objets qu’il est impossible de sérialiser au format AMF3, notamment les objets d’affichage, ne peuvent pas être transmis au paramètre arg. Pour transmettre correctement une classe personnalisée, la définition de classe doit être enregistrée avec la fonction flash.net.registerClassAlias() ou les métadonnées [RemoteClass]. Quelle que soit la technique choisie, le même alias doit être utilisé pour les deux versions du programme de travail de la classe .

Il existe cinq types d’objets qui échappent à la règle selon laquelle les objets ne sont pas partagés entre les programmes de travail :

  • Worker
  • MessageChannel
  • ByteArray partageable (objet ByteArray dont la propriété shareable est définie sur true)
  • Mutex
  • Condition

Si vous transmettez une occurrence de ces objets au paramètre arg, chaque programme de travail possède une référence au même objet sous-jacent. Les modifications apportées à une occurrence dans un programme de travail (worker) sont immédiatement disponibles dans les autres programmes de travail. En outre, si vous transmettez plusieurs fois la même occurrence de ces objets à un programme de travail à l’aide de la méthode send(), le moteur d’exécution ne crée par une nouvelle copie de l’objet dans le programme de travail de réception. Au lieu de cela, la même référence est réutilisée afin de réduire l’utilisation de la mémoire système.

Par défaut, cette méthode ajoute l’objet à la file d’attente et est immédiatement renvoyée en poursuivant l’exécution à la ligne de code suivante. Si vous souhaitez éviter que la file d’attente atteigne une certaine taille, vous pouvez utiliser le paramètre queueLimit pour spécifier le nombre d’éléments maximum que la file d’attente peut contenir. Si, au moment de l’appel de la méthode send(), le nombre d’éléments dans la file d’attente est supérieur à la limite que vous avez spécifiée, le programme de travail interrompt le thread d’exécution à l’appel de la méthode send(). Lorsque le programme de travail de réception appelle la méthode receive() le nombre de fois suffisantes pour que la taille de la file d’attente soit inférieure à la limite spécifiée, l’appel de la méthode send() reprend et se termine. Le programme de travail poursuit alors l’exécution à partir de la ligne de code suivante.

Paramètres

arg:* — l’objet à ajouter à la file d’attente des messages
 
queueLimit:int (default = -1) — nombre maximal d’objets de message que la file d’attente des messages peut contenir. Si la file d’attente contient plus d’objets que la limite autorisée, le programme de travail d’envoi interrompt l’exécution jusqu’à ce que les messages soient reçus et que la taille de la file d’attente diminue et soit inférieure à la limite autorisée.


Evénements
channelMessage:Event — distribué pour informer le programme de travail de réception qu’un objet de message est disponible dans la file d’attente

Valeur émise
IOError — si le canal est fermé au moment de l’appel de la méthode ou si l’argument queueLimit entraîne l’interruption de l’exécution et la fermeture du canal par un autre programme de travail
 
ArgumentError — si le code d’appel ne se trouve pas dans le programme de travail d’envoi
 
ScriptTimeoutError — si la méthode est appelée à partir du code du programme de travail primordial dans Flash Player et que l’argument queueLimit entraîne l’interruption du programme de travail pendant une durée supérieure au délai d’expiration du script (15 secondes par défaut)

Eléments de l’API associés

toString

()méthode 
override public function toString():String

Version du langage: ActionScript 3.0
Versions du moteur d’exécution: Flash Player 11.4, AIR 3.4

Renvoie la représentation sous forme de chaîne de l’objet spécifié.

Remarque : les méthodes de la classe Object sont créées dynamiquement sur le prototype correspondant. Pour redéfinir cette méthode dans une sous-classe d’Object, n’utilisez pas le mot-clé override. Par exemple, une sous-classe d’Object implémente function toString():String au lieu d’utiliser un remplacement de la classe de base.

Valeur renvoyée
String — Représentation sous forme de chaîne de l’objet.
Détails de l’événement

channelMessage

Evénement
Type d’objet d’événement: flash.events.Event
propriété Event.type = flash.events.Event.CHANNEL_MESSAGE

Version du langage: ActionScript 3.0
Versions du moteur d’exécution: Flash Player 11.4, AIR 3.4

Distribué chaque fois que le programme de travail d’envoi appelle la méthode send() de cet objet MessageChannel en indiquant qu’un nouvel objet de message est disponible dans la file d’attente de l’occurrence de MessageChannel.

La constante Event.CHANNEL_MESSAGE définit la valeur de la propriété type d’un objet d’événement channelMessage.

Les propriétés de cet événement sont les suivantes :

PropriétéValeur
bubblesfalse
cancelablefalse ; il n’existe aucun comportement par défaut à annuler.
currentTargetL’objet qui traite activement l’objet Event avec un écouteur d’événements.
targetObjet ayant distribué l’événement this.

channelState

Evénement  
Type d’objet d’événement: flash.events.Event
propriété Event.type = flash.events.Event.CHANNEL_STATE

Version du langage: ActionScript 3.0
Versions du moteur d’exécution: Flash Player 11.4, AIR 3.4

Distribué lorsque la valeur de la propriété state du canal de message change.

La constante Event.CHANNEL_STATE définit la valeur de la propriété type d’un objet d’événement channelState.

Les propriétés de cet événement sont les suivantes :

PropriétéValeur
bubblesfalse
cancelablefalse ; il n’existe aucun comportement par défaut à annuler.
currentTargetL’objet qui traite activement l’objet Event avec un écouteur d’événements.
targetObjet ayant distribué l’événement this.




[ X ]Pourquoi existe-t-il du contenu en anglais ?
Certaines parties du Guide de référence ActionScript 3.0 sont en anglais

Tout le contenu du Guide de référence ActionScript 3.0 n’a pas été traduit dans toutes les langues. Si un élément de langage n’est pas traduit, il s’affiche en anglais. Par exemple, la classe ga.controls.HelpBox n’est traduite dans aucune langue. Ainsi, dans la version française du guide de référence, la classe ga.controls.HelpBox apparaît en anglais.