Paket | flash.system |
Klass | public final class MessageChannel |
Arv | MessageChannel EventDispatcher Object |
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 11.4, AIR 3.4 |
Varje MessageChannel-objekt innehåller en kö med meddelandeobjekt som skickats från den avsändande arbetaren till den mottagande arbetaren. För varje anrop av send()
läggs ett objekt till i kön. För varje anrop av receive()
hämtas det äldsta meddelandeobjektet från kön.
Du kan inte skapa MessageChannel-förekomster direkt genom att anropa MessageChannel ()
-konstruktorn. Om du vill skapa en MessageChannel-instans anropar du metoden createMessageChannel()
för Worker-objektet som i sin tur skickar meddelanden i kanalen, med det mottagande Worker-objektet som ett argument.
Här följer ett vanligt arbetsflöde för att skicka meddelanden med ett MessageChannel-objekt:
-
Anropa den skickande arbetarens
createMessageChannel()
-metod för att skapa meddelandekanalen// In the sending worker swf var sendChannel:MessageChannel; sendChannel = Worker.current.createMessageChannel(receivingWorker);
-
Skicka meddelandekanalen till den andra arbetaren antingen genom att anropa
Worker.setSharedProperty()
eller genom att genom att skicka den via en befintlig meddelandekanalreceivingWorker.setSharedProperty("incomingChannel", sendChannel);
-
Kod i den mottagande arbetaren registrerar en avlyssnare med MessageChannel-objektet för
channelMessage
-händelsen// In the receiving worker swf var incomingChannel:MessageChannel; incomingChannel = Worker.current.getSharedProperty("incomingChannel"); incomingChannel.addEventListener(Event.CHANNEL_MESSAGE, handleIncomingMessage);
-
Kod i den avsändande arbetaren skickar ett meddelande genom att anropa metoden
send()
// In the sending worker swf sendChannel.send("This is a message");
-
I miljön anropas händelsehanteraren i den mottagande arbetarens kod för att visa att ett meddelande har skickats
// 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 }
-
Kod i den mottagande arbetaren anropar metoden
receive()
för att hämta meddelandet. Objektet som returneras av metodenreceive()
har samma datatyp som objektet som skickas till metodensend()
.var message:String = incomingChannel.receive() as String;
Förutom det asynkrona arbetsflödet som beskrivs ovan kan du använda ett alternativt arbetsflöde med metoden receive()
för att pausa koden i den mottagande arbetaren och vänta tills ett meddelande skickas. Mer information finns i metodbeskrivningen för receive()
.
Klassen MessageChannel är en av de speciella objekttyper som delas mellan arbetare i stället för att kopieras mellan dem. När du skickar en meddelandekanal från en arbetare till en annan arbetare, antingen genom att anropa Worker-objektets setSharedProperty()
-metod eller genom att använda ett MessageChannel-objekt, kommer båda arbetarna att ha en referens till samma MessageChannel-objekt i miljöns minne.
Relaterade API-element
Egenskap | Definieras med | ||
---|---|---|---|
constructor : Object
En referens till klassobjektet eller konstruktorfunktionen för en given objektinstans. | Object | ||
messageAvailable : Boolean [skrivskyddad]
Anger om MessageChannel innehåller ett eller flera meddelanden från den avsändande arbetaren i dess interna meddelandekö. | MessageChannel | ||
state : String [skrivskyddad]
Anger aktuellt läge för objektet MessageChannel (öppen, stänger eller stängd). | MessageChannel |
Metod | Definieras med | ||
---|---|---|---|
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void [åsidosätt]
Registrerar ett händelseavlyssnarobjekt för ett EventDispatcher-objekt så att avlyssnaren får meddelanden om händelser. | MessageChannel | ||
Instruerar aktuell MessageChannel att den ska stängas när alla meddelanden har tagits emot. | MessageChannel | ||
Skickar en händelse till händelseflödet. | EventDispatcher | ||
Kontrollerar om EventDispatcher-objektet har några avlyssnare registrerade för en viss typ av händelse. | EventDispatcher | ||
Anger om det finns en egenskap angiven för ett objekt. | Object | ||
Anger om en instans av klassen Object finns i prototypkedjan för objektet som anges som parameter. | Object | ||
Anger om den angivna egenskapen finns och är uppräkningsbar. | Object | ||
Hämtar ett enskilt meddelandeobjekt från meddelandekön vilket skickats genom denna meddelandekanal. | MessageChannel | ||
[åsidosätt]
Tar bort en avlyssnare från EventDispatcher-objektet. | MessageChannel | ||
Skickar ett objekt från den avsändande arbetaren och lägger till det i meddelandekön för den mottagande arbetaren. | MessageChannel | ||
Anger tillgänglighet för en dynamisk egenskap för slingåtgärder. | Object | ||
Returnerar det här objektets strängrepresentation, formaterad i enlighet med språkspecifika konventioner. | Object | ||
[åsidosätt]
Returnerar det angivna objektets strängbeteckning. | MessageChannel | ||
Returnerar det angivna objektets primitiva värde. | Object | ||
Kontrollerar om en händelseavlyssnare är registrerad för det här EventDispatcher-objektet eller något av dess överordnade objekt för den angivna händelsetypen. | EventDispatcher |
Händelse | Sammanfattning | Definieras med | ||
---|---|---|---|---|
[utsändningshändelse] Skickas när Flash Player eller AIR får operativsystemfokus och blir aktivt. | EventDispatcher | |||
Skickas varje gång som den avsändande arbetaren anropar detta MessageChannel-objekts send()-metod, vilket indikerar att ett nytt meddelandeobjekt är tillgängligt i MessageChannel-instansens kö. | MessageChannel | |||
Skickas när värdet på meddelandekanalens state-egenskap ändras. | MessageChannel | |||
[utsändningshändelse] Skickas när Flash Player eller AIR förlorar operativsystemfokus och blir inaktivt. | EventDispatcher |
messageAvailable | egenskap |
messageAvailable:Boolean
[skrivskyddad] Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 11.4, AIR 3.4 |
Anger om MessageChannel innehåller ett eller flera meddelanden från den avsändande arbetaren i dess interna meddelandekö.
Implementering
public function get messageAvailable():Boolean
state | egenskap |
state:String
[skrivskyddad] Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 11.4, AIR 3.4 |
Anger aktuellt läge för objektet MessageChannel (öppen, stänger eller stängd). De möjliga värdena för den här egenskapen är definierade som konstanter i klassen MessageChannelState.
Implementering
public function get state():String
Relaterade API-element
addEventListener | () | metod |
override public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 11.4, AIR 3.4 |
Registrerar ett händelseavlyssnarobjekt för ett EventDispatcher-objekt så att avlyssnaren får meddelanden om händelser. Du kan registrera händelseavlyssnare på alla noder i visningslistan efter en särskild typ av händelse, fas och prioritet.
När du har registrerat en händelseavlyssnare går det inte att ändra dess prioritet genom ytterligare anrop till addEventListener()
. För att kunna ändra avlyssnarens prioritet måste du först anropa removeListener()
. Sedan går det att registrera avlyssnaren på nytt med den nya prioritetsnivån.
Kom ihåg att när avlyssnaren har registrerats så skapar anrop till addEventListener()
med annan type
eller useCapture
-värde en separat avlyssnarregistrering. Om du till exempel först registrerar en avlyssnare med useCapture
inställt på true
, avlyssnar den bara under hämtningsfasen. Om du anropar addEventListener()
igen med samma avlyssningsobjekt men med useCapture
inställt på false
, får du två separata avlyssnare: en som avlyssnar under hämtningsfasen och en som avlyssnar under både mål- och bubblingsfasen.
Det går inte att registrera en händelseavlyssnare endast för målfasen eller bubblingsfasen. De faserna är sammankopplade vid registreringen eftersom bubblande bara tillämpas på de som är överordnade målnoden.
Om du inte längre behöver en händelseavlyssnare tar du bort den genom att anropa removeEventListener()
. Annars finns risk för minnesproblem. Händelseavlyssnare tas inte automatiskt bort från minnet, eftersom skräpinsamlaren inte tar bort avlyssnaren så länge det skickande objektet finns (om inte parametern useWeakReference
är true
).
Kopiering av en EventDispatcher-instans innebär inte att de händelseavlyssnare som är kopplade till den kopieras. (Om en nod som du nyss skapat behöver en händelseavlyssnare måste du koppla avlyssnaren efter att du skapat noden.) Om du däremot flyttar en EventDispatcher-instans flyttas den kopplade händelseavlyssnaren med.
Om händelseavlyssnaren är registrerad på en nod samtidigt som en händelse bearbetas på den noden aktiveras inte händelseavlyssnaren under den aktuella fasen, men den kan aktiveras under en senare fas i händelseflödet, t.ex. bubblingsfasen.
Om en händelseavlyssnare tas bort från en nod samtidigt som en händelse bearbetas på den noden, aktiveras den ändå av de aktuella åtgärderna. När händelseavlyssnaren tagits bort anropas den aldrig mer (om den inte registreras på nytt för framtida bearbetning).
Parametrar
type:String — Händelsens typ.
| |
listener:Function — Avlyssnarfunktionen som bearbetar händelsen. Den här funktionen måste acceptera ett Event-objekt som sin enda parameter och får inte returnera någonting, se följande exempel:
function(evt:Event):void Funktionen kan ha vilket namn som helst. | |
useCapture:Boolean (default = false ) —
Avgör om avlyssnaren fungerar i hämtningsfasen eller mål- och bubblingsfaserna. Om useCapture är inställd på true bearbetar avlyssningsprocessen bara händelsen under hämtningsfasen och inte under mål- eller bubblingsfasen. Om useCapture är inställd på false bearbetar avlyssningsprocessen bara händelsen under mål- och bubblingsfasen. Om du vill avlyssna händelsen under alla tre faserna anropar du addEventListener två gånger, en gång med useCapture inställd på true , och sedan en gång med useCapture inställd på false .
| |
priority:int (default = 0 ) — Händelseavlyssnarens prioritetsnivå. Prioriteten anges av ett 32-bitars heltal med tecken. Ju högre tal, desto högre prioritet. Alla avlyssnare med prioritet n bearbetas före avlyssnare med prioritet n -1. Om två eller fler avlyssnare har samma prioritet bearbetas de i den ordning de lades till. Standardprioritet är 0.
| |
useWeakReference:Boolean (default = false ) — Avgör om referensen till avlyssnaren är stark eller svag. En stark referens (standard) förhindrar att avlyssnaren skräpsamlas. Det gör inte en svag referens. Medlemsfunktioner på klassnivå skräpsamlas inte, så du kan ange |
close | () | metod |
public function close():void
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 11.4, AIR 3.4 |
Instruerar aktuell MessageChannel att den ska stängas när alla meddelanden har tagits emot.
När du anropar den här metoden kan du inte längre anropa metoden send()
för att lägga till meddelanden i kön. Anropet med send()
kommer att misslyckas och returnera false
.
Du kan också anropa metoden receive()
för att erhålla meddelanden som redan väntar i kön. Om kön är tom kommer receive()
-anropet att returnera null
.
Händelser
channelState: — skickas när metoden close() anropas (medför att egenskapen state åsätts värdet MessageChannelState.CLOSING ). Skickas när alla meddelanden har tagits emot och egenskapen state är MessageChannelState.CLOSED .
|
receive | () | metod |
public function receive(blockUntilReceived:Boolean = false):*
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 11.4, AIR 3.4 |
Hämtar ett enskilt meddelandeobjekt från meddelandekön vilket skickats genom denna meddelandekanal.
Varje gång den avsändande arbetarens kod anropar MessageChannel-objektets send()
-metod, läggs ett objekt till i meddelandekanalens interna meddelandekö. Dessa objekt staplas i kön tills de tas bort ett i taget genom att den mottagande arbetaren anropar metoden receive()
. Meddelandeobjekten tas emot i den ordning som de skickades.
Använd egenskapen messageAvailable
om du vill kontrollera om kön innehåller ett meddelandeobjekt som ska tas emot.
I vanliga fall är objektet som överförs till send()
serialiserat i AMF3-formatet. När det tagits bort från kön med anropet receive()
kommer det att avserialiseras till ett ActionScript-objekt (en kopia av originalobjektet) i den mottagande arbetaren och arbetaren erhåller en referens till den kopian. Vissa typer av objekt delas mellan arbetare i stället för att kopieras. I detta fall är det objekt som den mottagande arbetaren erhåller en referens till det delade objektet i stället för en ny kopia av det. Mer information om detta finns i metodbeskrivningen för send()
.
Metodens beteende ändras om meddelandekön är tom och du skickar true
för blockUntilReceived
-parametern. I detta fall pausar arbetaren programmet vid receive()
-anropet och ingen ytterligare kod körs. När den avsändande arbetaren anropar send()
, slutförs receive()
-anropet genom att meddelandet tas emot. Arbetaren kommer sedan att återta kodkörningen vid nästa kodrad som följer efter anropet.
Parametrar
blockUntilReceived:Boolean (default = false ) — anger om arbetarens program ska erhålla ett meddelandeobjekt och sedan fortsätta körningen (false ) eller om det ska pausas vid receive() -anropet och vänta på att ett meddelande skickas om kön är tom (true )
|
* — en kopia av objektet som skickas till metoden send() av den avsändande arbetaren. Om objektet är den typ av objekt som delas mellan arbetare, är det returnerade värdet en referens till det delade objektet och inte en kopia därav. Om inga meddelanden är tillgängliga i kön returnerar metoden null .
|
Utlöser
IOError — om kanalen är stängd när metoden anropas eller om argumentet blockUntilReceived resulterar i att körningen pausas och att kanalen sedan stängs av en annan arbetare.
| |
ArgumentError — om den anropande koden inte finns i den mottagande arbetaren
| |
ScriptTimeoutError — om metoden anropas från koden i den primitiva arbetaren i Flash Player och argumentet blockUntilReceived orsakar att arbetaren pausar längre än timeout-gränsen för skriptet (15 sekunder som standard)
|
Relaterade API-element
removeEventListener | () | metod |
override public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 11.4, AIR 3.4 |
Tar bort en avlyssnare från EventDispatcher-objektet. Ett anrop till den här metoden har ingen effekt om det inte finns någon matchande avlyssnare registrerad för EventDispatcher-objektet.
Parametrar
type:String — Händelsens typ.
| |
listener:Function — Det avlyssnarobjekt som ska tas bort.
| |
useCapture:Boolean (default = false ) —
Anger om avlyssnaren registrerades för hämtningsfasen eller mål- och bubblingsfaserna. Om avlyssnaren registrerades både för hämtningsfasen och mål- och bubblingsfaserna krävs två anrop till removeEventListener() för att båda ska tas bort: ett anrop med useCapture() inställt på true och ett annat anrop med useCapture() inställt på false .
|
send | () | metod |
public function send(arg:*, queueLimit:int = -1):void
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 11.4, AIR 3.4 |
Skickar ett objekt från den avsändande arbetaren och lägger till det i meddelandekön för den mottagande arbetaren.
Objektet som skickas till parametern arg
kan näst intill vara vilket objekt som helst. Förutom undantagen enligt nedan skickas inte alla objekt till parametern arg
som referens. Alla ändringar som görs av objektet i en arbetare, efter det att send()
har anropats, vidarekopplas inte till den andra arbetaren. Objektet kopieras genom att det serialiseras till AMF3-format och avserialiseras till ett nytt objekt i den mottagande arbetaren när receive()
anropas. Detta medför att objekt som inte kan serialiseras till AMF3-format, inklusive visningsobjekt, inte kan skickas till parametern arg
. För att en anpassad klass ska kunna skickas måste klassdefinitionen registreras med flash.net.registerClassAlias()
-funktionen eller med [RemoteClass]
-metadata. Oberoende av teknik måste samma alias användas för båda arbetarnas versioner av klassen.
Det finns fem typer av objekt som utgör undantag från regeln att objekt inte delas mellan arbetare:
- Arbetare
- MessageChannel
- Delbar ByteArray (ett ByteArray-objekt med dess
shareable
-egenskap inställd påtrue
- Mutex
- Condition
Om du skickar en instans av dessa objekt till parametern arg
får varje arbetare en referens till samma underliggande objekt. Ändringar gjorda i en instans i en arbetare är omedelbart tillgängliga i en annan arbetare. Om du dessutom skickar samma instans av dessa objekt mer än en gång med send()
, kommer ingen ny kopia av objektet att skapas för den mottagande arbetaren i miljön. I stället återanvänds samma referens för att minimera systemminnesbelastningen.
Det vanliga är att denna metod lägger till objektet i kön och returnerar det omedelbart, för att fortsätta körningen med nästa kodrad. Om du vill förhindra att kön växer utöver en viss storlek använder du parametern queueLimit
för att ange maximalt antal objekt som ska tillåtas i kön. Om antalet objekt i kön är större när du anropar send()
än det gränsvärde du angav, kommer arbetaren att pausa körningen av huvudprogrammet vid send()
-anropet. Anropet send() kommer att slutföras när den mottagande arbetaren anropat receive()
tillräckligt många gånger så att kön minskat under gränsvärdet. Arbetaren forstätter sedan körningen från nästa kodrad.
Parametrar
arg:* — objektet som ska läggas till i meddelandekön
| |
queueLimit:int (default = -1 ) — maximalt antal meddelandeobjekt som meddelandekön kan innehålla. Om kön innehåller fler objekt än gränsvärdet, kommer den avsändande arbetaren att pausa körningen tills meddelanden tas emot och köstorleken minskar under gränsvärdet.
|
Händelser
channelMessage: — skickas för att meddela mottagande arbetare att ett meddelandeobjekt är tillgängligt i kön
|
Utlöser
IOError — om kanalen är stängd när metoden anropas eller om argumentet queueLimit resulterar i att körningen pausas och att kanalen sedan stängs av en annan arbetare.
| |
ArgumentError — om den anropande koden inte finns i den skickande arbetaren
| |
ScriptTimeoutError — om metoden anropas från koden i den primitiva arbetaren i Flash Player och argumentet queueLimit orsakar att arbetaren pausar längre än timeout-gränsen för skriptet (15 sekunder som standard)
|
Relaterade API-element
toString | () | metod |
override public function toString():String
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 11.4, AIR 3.4 |
Returnerar det angivna objektets strängbeteckning.
Obs! Metoder till Object-klassen skapas dynamiskt på objektets prototyp. Om du vill definiera om metoden i en underklass till Object-klassen ska du inte använda nyckelordet override
. En underklass till klassen Object implementerar till exempel function toString():String
i stället för att åsidosätta basklassen.
String — En strängbeteckning på objektet.
|
channelMessage | Händelse |
flash.events.Event
egenskap Event.type =
flash.events.Event.CHANNEL_MESSAGE
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 11.4, AIR 3.4 |
Skickas varje gång som den avsändande arbetaren anropar detta MessageChannel-objekts send()
-metod, vilket indikerar att ett nytt meddelandeobjekt är tillgängligt i MessageChannel-instansens kö.
Event.CHANNEL_MESSAGE
definierar värdet på type
-egenskapen i ett channelMessage
-händelseobjekt.
Den här händelsen har följande egenskaper:
Egenskap | Värde |
---|---|
bubbles | false |
cancelable | false ; det finns inget standardbeteende att avbryta. |
currentTarget | Det objekt som aktivt behandlar Event-objektet med en händelseavlyssnare. |
target | Det objekt som skickade den här händelsen. |
channelState | Händelse |
flash.events.Event
egenskap Event.type =
flash.events.Event.CHANNEL_STATE
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 11.4, AIR 3.4 |
Skickas när värdet på meddelandekanalens state
-egenskap ändras.
Event.CHANNEL_STATE
definierar värdet på type
-egenskapen i ett channelState
-händelseobjekt.
Den här händelsen har följande egenskaper:
Egenskap | Värde |
---|---|
bubbles | false |
cancelable | false ; det finns inget standardbeteende att avbryta. |
currentTarget | Det objekt som aktivt behandlar Event-objektet med en händelseavlyssnare. |
target | Det objekt som skickade den här händelsen. |
Tue Jun 12 2018, 01:40 PM Z