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;
+ }
}
}