package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.system.MessageChannel;
import flash.system.Worker;
import flash.system.WorkerDomain;
import flash.utils.setInterval;
public class WorkerTest extends Sprite
{
protected var mainToWorker:MessageChannel;
protected var workerToMain:MessageChannel;
protected var worker:Worker;
public function WorkerTest()
{
this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
private function onAddedToStage(e:Event) : void
{
this.removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
init();
}
private function init() : void
{
if (Worker.current.isPrimordial)
{
worker = WorkerDomain.current.createWorker(this.loaderInfo.bytes);
mainToWorker = Worker.current.createMessageChannel(worker);
workerToMain = worker.createMessageChannel(Worker.current);
worker.setSharedProperty("mainToWorker", mainToWorker);
worker.setSharedProperty("workerToMain", workerToMain);
workerToMain.addEventListener(Event.CHANNEL_MESSAGE, onWorkerToMain);
worker.start();
setInterval(
function () : void
{
//helloworld();
count();
},
);
}
else
{
mainToWorker = Worker.current.getSharedProperty("mainToWorker");
workerToMain = Worker.current.getSharedProperty("workerToMain");
mainToWorker.addEventListener(Event.CHANNEL_MESSAGE, onMainToWorker);
}
}
protected function helloworld() : void
{
mainToWorker.send("HELLO");
trace("[Main] HELLO ");
}
protected function count() : void
{
mainToWorker.send("ADD");
mainToWorker.send(2);
mainToWorker.send(5);
trace("[Main] ADD 2 + 5 ?");
}
protected function onMainToWorker(e:Event) : void
{
var msg:* = mainToWorker.receive();
switch (msg)
{
case "HELLO":
workerToMain.send("WORLD");
break;
case "ADD":
var a:int = mainToWorker.receive();
var b:int = mainToWorker.receive();
workerToMain.send(a + b);
break;
}
}
protected function onWorkerToMain(e:Event) : void
{
trace("[Worker] " + workerToMain.receive());
}
}
}
result:
[Main] ADD 2 + 5 ?
[Worker] 7