Package | flash.system |
Classe | public final class MessageChannel |
Héritage | MessageChannel EventDispatcher Object |
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11.4, AIR 3.4 |
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 :
-
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);
-
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);
-
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);
-
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");
-
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 }
-
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éthodereceive()
possède le même type de données que l’objet transmis dans la méthodesend()
.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é | 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 | ||
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éthode | Dé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 | ||
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 | ||
Indique si la propriété spécifiée existe et est énumérable. | Object | ||
Extrait un seul objet de message de la file d’attente des messages envoyés via ce canal de message. | MessageChannel | ||
[override]
Supprime un écouteur de l’objet EventDispatcher. | MessageChannel | ||
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 | ||
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 | ||
[override]
Renvoie la représentation sous forme de chaîne de l’objet spécifié. | MessageChannel | ||
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 |
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 | |||
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 | |||
[Evénement de diffusion] Distribué lorsque l’application Flash Player ou AIR perd le focus du système d’exploitation et devient inactive. | EventDispatcher |
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
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 |
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: — 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 )
|
* — 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 surtrue
) - 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: — 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.
String — Représentation sous forme de chaîne de l’objet.
|
channelMessage | Evé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.
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 |
---|---|
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. |
target | Objet ayant distribué l’événement this. |
channelState | Evé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.
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 |
---|---|
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. |
target | Objet ayant distribué l’événement this. |
Tue Jun 12 2018, 09:30 AM Z