diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..eb5a316 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +target diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..17bf7fe --- /dev/null +++ b/pom.xml @@ -0,0 +1,82 @@ + + + 4.0.0 + + + + sonatype + http://repository.sonatype.org/content/groups/flexgroup/ + + + + + sonatype + http://repository.sonatype.org/content/groups/flexgroup/ + + + + com.codeazur + as3swf + 1.3-yelbota + swc + + + 4.5.1.21328 + 4.0-beta-7 + 10.2 + + + + src + + + org.sonatype.flexmojos + flexmojos-maven-plugin + ${flexmojos.version} + true + + + + ${build.outputDirectory}/${build.finalName} + + Main.as + ${flashplayer.version} + + + + com.adobe.flex + compiler + ${flex.sdk.version} + pom + + + + + + + + + com.adobe.flex.framework + playerglobal + ${flex.sdk.version} + ${flashplayer.version} + provided + swc + + + + + + Flexis maven repository-releases + Flexis maven repository-releases + http://artifactory.flexis.ru:8030/artifactory/flexis-local + + + Flexis maven repository-snapshots + Flexis maven repository-snapshots + http://artifactory.flexis.ru:8030/artifactory/flexis-local + + + diff --git a/src/com/codeazur/as3swf/SWFTimelineContainer.as b/src/com/codeazur/as3swf/SWFTimelineContainer.as index d32ba18..0b8b38d 100644 --- a/src/com/codeazur/as3swf/SWFTimelineContainer.as +++ b/src/com/codeazur/as3swf/SWFTimelineContainer.as @@ -49,7 +49,10 @@ package com.codeazur.as3swf public static var TIMEOUT:int = 50; public static var AUTOBUILD_LAYERS:Boolean = false; public static var EXTRACT_SOUND_STREAM:Boolean = true; - + + public static const ASYNC_PROCESS_PARSING:int = 0; + public static const ASYNC_PROCESS_PUBLISHING:int = 1; + protected var _tags:Vector.; protected var _tagsRaw:Vector.; protected var _dictionary:Dictionary; @@ -71,6 +74,9 @@ package com.codeazur.as3swf protected var _tagFactory:ISWFTagFactory; + protected var _currentAsyncProcess:int; + protected var abortAsyncProcessFlag:Boolean; + internal var rootTimelineContainer:SWFTimelineContainer; public var backgroundColor:uint = 0xffffff; @@ -78,18 +84,21 @@ package com.codeazur.as3swf public function SWFTimelineContainer() { + initializeCollections(); + _tagFactory = new SWFTagFactory(); + + rootTimelineContainer = this; + + enterFrameProvider = new Sprite(); + } + + private function initializeCollections():void { _tags = new Vector.(); _tagsRaw = new Vector.(); _dictionary = new Dictionary(); _scenes = new Vector.(); _frames = new Vector.(); _layers = new Vector.(); - - _tagFactory = new SWFTagFactory(); - - rootTimelineContainer = this; - - enterFrameProvider = new Sprite(); } public function get tags():Vector. { return _tags; } @@ -118,8 +127,17 @@ package com.codeazur.as3swf while ((tag = parseTag(data)) && tag.type != TagEnd.TYPE) {}; parseTagsFinalize(); } - + + public function abortAsyncProcess():void { + if (_currentAsyncProcess == ASYNC_PROCESS_PARSING) + initializeCollections(); + + abortAsyncProcessFlag = true; + } + public function parseTagsAsync(data:SWFData, version:uint):void { + abortAsyncProcessFlag = false; + _currentAsyncProcess = ASYNC_PROCESS_PARSING; parseTagsInit(data, version); enterFrameProvider.addEventListener(Event.ENTER_FRAME, parseTagsAsyncHandler); } @@ -134,12 +152,14 @@ package com.codeazur.as3swf protected function parseTagsAsyncInternal():void { var tag:ITag; var time:int = getTimer(); - while ((tag = parseTag(_tmpData, true)) && tag.type != TagEnd.TYPE) { + while ((tag = parseTag(_tmpData, true)) && tag.type != TagEnd.TYPE && !abortAsyncProcessFlag) { if((getTimer() - time) > TIMEOUT) { enterFrameProvider.addEventListener(Event.ENTER_FRAME, parseTagsAsyncHandler); return; } } + if (abortAsyncProcessFlag) + return; parseTagsFinalize(); if(eof) { dispatchEvent(new SWFErrorEvent(SWFErrorEvent.ERROR, SWFErrorEvent.REASON_EOF)); @@ -224,6 +244,8 @@ package com.codeazur.as3swf } public function publishTagsAsync(data:SWFData, version:uint):void { + abortAsyncProcessFlag = false; + _currentAsyncProcess = ASYNC_PROCESS_PUBLISHING; _tmpData = data; _tmpVersion = version; _tmpTagIterator = 0; @@ -249,9 +271,12 @@ package com.codeazur.as3swf return; } } - while (tag.type != TagEnd.TYPE); - dispatchEvent(new SWFProgressEvent(SWFProgressEvent.PROGRESS, _tmpTagIterator, tags.length)); - dispatchEvent(new SWFProgressEvent(SWFProgressEvent.COMPLETE, _tmpTagIterator, tags.length)); + while (tag.type != TagEnd.TYPE && !abortAsyncProcessFlag); + + if (!abortAsyncProcessFlag) { + dispatchEvent(new SWFProgressEvent(SWFProgressEvent.PROGRESS, _tmpTagIterator, tags.length)); + dispatchEvent(new SWFProgressEvent(SWFProgressEvent.COMPLETE, _tmpTagIterator, tags.length)); + } } public function publishTag(data:SWFData, tag:ITag, rawTag:SWFRawTag, version:uint):void { @@ -495,5 +520,9 @@ package com.codeazur.as3swf } return str; } + + public function get currentAsyncProcess():int { + return _currentAsyncProcess; + } } }