classes

URLRequestBufferItem.as

Stiahnuť URLRequestBufferItem.as

package sk.yoz.net
{
    import flash.display.Loader;
    import flash.display.LoaderInfo;
    import flash.events.Event;
    import flash.events.EventDispatcher;
    import flash.events.TimerEvent;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.utils.Timer;
    
    public class URLRequestBufferItem extends Object
    {
        public var buffer:URLRequestBuffer;
        public var id:uint;
        public var loader:EventDispatcher;
        public var request:URLRequest;
        public var priority:uint;
        public var delay:uint;
        
        protected var _ready:Boolean;
        
        public function URLRequestBufferItem(
            buffer:URLRequestBuffer, 
            id:uint, 
            loader:EventDispatcher, 
            request:URLRequest, 
            priority:uint, 
            delay:uint = 0):void
        {
            super();
            
            if(!(loader is Loader || loader is URLLoader))
                throw new Error("loader must be instance of Loader or " + 
                        "URLLoader class");
            
            this.buffer = buffer;
            this.id = id;
            this.loader = loader;
            this.request = request;
            this.priority = priority;
            this.delay = delay;
            _ready = delay ? false : true;
            
            if(delay)
            {
                var timer:Timer = new Timer(delay, 1);
                timer.addEventListener(TimerEvent.TIMER_COMPLETE, onDelay);
                timer.start();
            }
        }
        
        public function get dispatcher():EventDispatcher
        {
            return loader is Loader 
                ? Loader(loader).contentLoaderInfo 
                : URLLoader(loader);
        }
        
        public function get ready():Boolean
        {
            return _ready;
        }
        
        public function load():void
        {
            if(loader is Loader)
                Loader(loader).load(request);
            else
                URLLoader(loader).load(request);
        }
        
        public function close():void
        {
            try
            {
                if(loader is Loader)
                    Loader(loader).close();
                else if(loader is URLLoader)
                    URLLoader(loader).close();
            }
            catch(error:Error){}
        }
        
        protected function onDelay(event:TimerEvent):void
        {
            var timer:Timer = Timer(event.currentTarget);
            var type:String = TimerEvent.TIMER_COMPLETE;
            timer.removeEventListener(type, onDelay);
            _ready = true;
            buffer.loadNext();
        }
        
        public static function getLoader(event:Event):EventDispatcher
        {
            return event.target is LoaderInfo
                ? LoaderInfo(event.target).loader 
                : URLLoader(event.target);
        }
    }
}