work

by lizhi
...
@author lizhi
♥0 | Line 62 | Modified 2016-03-01 18:53:11 | MIT License
play

ActionScript3 source code

/**
 * Copyright lizhi ( http://wonderfl.net/user/lizhi )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/0QPH
 */

package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.system.MessageChannel;
    import flash.system.Worker;
    import flash.system.WorkerDomain;
    import flash.utils.ByteArray;
     
    /**
     * ...
     * @author lizhi
     */
    public class Test extends Sprite
    {
        private var bgWorker:Worker;
        private var shareBytes:ByteArray;
        private var messagePrimordial2BG:MessageChannel;
        private var messageBG2Primordial:MessageChannel;
         
        public function Test()
        {
            if(Worker.current.isPrimordial){
                stage.addEventListener(MouseEvent.CLICK, stage_click);
                 
                bgWorker = WorkerDomain.current.createWorker(this.loaderInfo.bytes);
                bgWorker.start();
                 
                //第一种方式传递数据共享bytearray
                shareBytes = new ByteArray;
                shareBytes.shareable = true;
                shareBytes.writeByte(0);
                bgWorker.setSharedProperty("test2", shareBytes);
                 
                //第二种传递数据方式单向传递消息泪messagechannel,接收方用事件侦听,receive方法得到数据。发送方用send发送数据
                messagePrimordial2BG = Worker.current.createMessageChannel(bgWorker);
                bgWorker.setSharedProperty("test3", messagePrimordial2BG);
                messageBG2Primordial=bgWorker.createMessageChannel(Worker.current);
                bgWorker.setSharedProperty("test4", messageBG2Primordial)
                messageBG2Primordial.addEventListener(Event.CHANNEL_MESSAGE, messageBG2Primordial_channelMessage);
            }else {
                addEventListener(Event.ENTER_FRAME, enterFrame);
                 
                shareBytes = Worker.current.getSharedProperty("test2") as ByteArray;
                messagePrimordial2BG = Worker.current.getSharedProperty("test3") as MessageChannel;
                messagePrimordial2BG.addEventListener(Event.CHANNEL_MESSAGE, messagePrimordial2BG_channelMessage);
                messageBG2Primordial = Worker.current.getSharedProperty("test4") as MessageChannel;
                messageBG2Primordial.send("后台worker向主worker发送的数据");
            }
        }
         
        private function messageBG2Primordial_channelMessage(e:Event):void
        {
            trace("主worker接到了数据:",messageBG2Primordial.receive());
        }
         
        private function messagePrimordial2BG_channelMessage(e:Event):void
        {
            trace("后台worker接到了数据:",messagePrimordial2BG.receive());
        }
         
        private function enterFrame(e:Event):void
        {
            //后台worker每一帧设置共享bytearray
            shareBytes.position = 0;
            shareBytes.writeByte(100 * Math.random());
             
            //第三种方式简单设置一个共享属性
            Worker.current.setSharedProperty("test",100*Math.random());
        }
         
        private function stage_click(e:MouseEvent):void
        {
            trace("getSharedProperty",bgWorker.getSharedProperty("test"));
            shareBytes.position = 0;
            trace("sharebytes", shareBytes.readByte());
            messagePrimordial2BG.send(100*Math.random());
        }
    }
}