├── .gitignore
├── LICENSE
├── README.textile
├── bin
├── examples
│ ├── ALLoggerExample.swf
│ ├── AddConfigComplexExample.swf
│ ├── AddConfigExample.swf
│ ├── AddLazyExample.swf
│ ├── SoundLoaderOnReadyExample.swf
│ ├── StatsMonitorExample.swf
│ ├── complex-queue-config.xml
│ └── simple-queue-config.xml
└── testing
│ ├── FlexTestSuite.swf
│ └── assets
│ ├── InspectorTestAssets.fla
│ ├── InspectorTestAssets.swf
│ └── test
│ ├── testCSS.css
│ ├── testIMAGE.png
│ ├── testJSON.json
│ ├── testSOUND.mp3
│ ├── testSWF.swf
│ ├── testTXT.txt
│ ├── testVIDEO.flv
│ ├── testXML.xml
│ └── testZIP.zip
├── build.properties
├── build.xml
├── build
└── libs
│ ├── as3-signals-v0.8.swc
│ ├── as3corelib-json.swc
│ └── flexunit
│ ├── License.txt
│ ├── as3-signals-utilities-async-v0.8.swc
│ ├── flexUnitTasks-4.1.0-8-javadoc.jar
│ ├── flexUnitTasks-4.1.0-8-sources.jar
│ ├── flexUnitTasks-4.1.0-8.jar
│ ├── flexunit-4.1.0-8-flex_4.1.0.16076.swc
│ ├── flexunit-aircilistener-4.1.0-8-4.1.0.16076.swc
│ ├── flexunit-cilistener-4.1.0-8-4.1.0.16076.swc
│ ├── flexunit-flexcoverlistener-4.1.0-8-4.1.0.16076.swc
│ ├── flexunit-uilistener-4.1.0-8-4.1.0.16076.swc
│ └── fluint-extensions-4.1.0-8-4.1.0.16076.swc
├── src
└── org
│ └── assetloader
│ ├── AssetLoader.as
│ ├── base
│ ├── AbstractLoader.as
│ ├── AssetLoaderBase.as
│ ├── AssetLoaderError.as
│ ├── AssetType.as
│ ├── LoaderFactory.as
│ ├── LoaderStats.as
│ ├── Param.as
│ └── StatsMonitor.as
│ ├── core
│ ├── IAssetLoader.as
│ ├── IConfigParser.as
│ ├── ILoadStats.as
│ ├── ILoader.as
│ └── IParam.as
│ ├── loaders
│ ├── BaseLoader.as
│ ├── BinaryLoader.as
│ ├── CSSLoader.as
│ ├── DisplayObjectLoader.as
│ ├── ImageLoader.as
│ ├── JSONLoader.as
│ ├── SWFLoader.as
│ ├── SoundLoader.as
│ ├── TextLoader.as
│ ├── VideoLoader.as
│ └── XMLLoader.as
│ ├── parsers
│ ├── URLParser.as
│ └── XmlConfigParser.as
│ ├── signals
│ ├── ErrorSignal.as
│ ├── HttpStatusSignal.as
│ ├── LoaderSignal.as
│ ├── NetStatusSignal.as
│ └── ProgressSignal.as
│ └── utils
│ ├── ALLogger.as
│ └── Inspector.as
├── src_examples
└── org
│ └── assetloader
│ └── example
│ ├── ALLoggerExample.as
│ ├── AddConfigComplexExample.as
│ ├── AddConfigExample.as
│ ├── AddLazyExample.as
│ ├── SoundLoaderOnReadyExample.as
│ └── StatsMonitorExample.as
└── src_unit
├── FlexUnitRunner.mxml
└── org
└── assetloader
├── AssetLoaderTest.as
├── AssetLoaderTestSuite.as
├── base
├── AbstractLoaderTest.as
├── AssetLoaderErrorTest.as
├── AssetLoaderQueueTest.as
├── BaseTestSuite.as
├── LoaderFactoryTest.as
├── LoaderStatsTest.as
├── ParamTest.as
└── StatsMonitorTest.as
├── loaders
├── BaseLoaderTest.as
├── BinaryLoaderTest.as
├── CSSLoaderTest.as
├── DisplayObjectLoaderTest.as
├── ImageLoaderTest.as
├── JSONLoaderTest.as
├── LoadersTestSuite.as
├── SWFLoaderTest.as
├── SoundLoaderTest.as
├── TextLoaderTest.as
├── VideoLoaderTest.as
└── XMLLoaderTest.as
├── parsers
├── ParsersTestSuite.as
├── URLParserTest.as
└── XmlConfigParserTest.as
└── utils
├── InspectorTest.as
└── UtilsTestSuite.as
/.gitignore:
--------------------------------------------------------------------------------
1 | /.settings/*
2 |
3 | /html-template/*
4 | /bin-debug/*
5 | /bin-release/*
6 | /bin/*.swc
7 | /bin/*.cache
8 | /bin/testing/*.cache
9 | docs/*
10 | obj/*
11 |
12 | .actionScriptProperties
13 | .flexProperties
14 | .flexLibProperties
15 | .FlexUnitSettings
16 | .project
17 |
18 | Icon
19 | Thumbs.db
20 | .DS_Store
21 | dist/*
22 | report/*
23 | doc/*
24 |
25 | user.properties
26 |
27 | *.iml
28 | *.ipr
29 | *.iws
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License
2 |
3 | Copyright (c) 2009, 2010 the original author or authors
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
--------------------------------------------------------------------------------
/README.textile:
--------------------------------------------------------------------------------
1 | h2. AssetLoader
2 |
3 | Multi file/asset loader for AS3 built on AS3Signals.
4 |
5 | h3. Overview
6 |
7 | AssetLoader provides an easy way to load multiple files. Assetloader does not use events; instead it uses "AS3Signals":http://github.com/robertpenner/as3-signals.
8 |
9 | h3. Some Features
10 |
11 | Please check out the "wiki section":http://github.com/Matan/AssetLoader/wiki for more information and examples.
12 |
13 | * Automatic Type detection.
14 | * Multiple connections, which you can define = faster loading = less waiting = happier users.
15 | * **No Events, AS3Signals only.**
16 | * No singletons! Construct as many AssetLoaders as you want!
17 | * Data is dispatched with strong types. NO CASTING!
18 | * Endless recursive group loaders within loaders, within loaders, etc.
19 | * Pause/Resume/Destroy capabilities.
20 | * Dynamic parameter system that works with code completion - No guessing!
21 | * Loader parameters smartly inherit from their parent loaders, which mean you write less code.
22 | * Real-time loading stats. This provides latency, speed, average and progress of all downloads.
23 | * Consolidated stats, loaders reclusively consolidate loading stats all the way down to the last child.
24 | * Can be configured via XML, straight up or from an external file with one easy call.
25 | * All loader errors are consolidated to one signal. IOError, SecurityError, etc. - you don't have to worry about it, they all boil down to one place. Which means you can "globally" handle loading errors with one listener/command.
26 | * Interfaces all round.
27 | * Unit tested! :D
28 | * Works super well with "Robotlegs":http://www.robotlegs.org! //what doesn’t :P
29 | * And some other stuff too!
30 |
31 | h2. License
32 |
33 | The MIT License
34 |
35 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
36 |
37 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
38 |
39 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
/bin/examples/ALLoggerExample.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matan/AssetLoader/e717ee7f410439ba2880621a70d191793cac2c46/bin/examples/ALLoggerExample.swf
--------------------------------------------------------------------------------
/bin/examples/AddConfigComplexExample.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matan/AssetLoader/e717ee7f410439ba2880621a70d191793cac2c46/bin/examples/AddConfigComplexExample.swf
--------------------------------------------------------------------------------
/bin/examples/AddConfigExample.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matan/AssetLoader/e717ee7f410439ba2880621a70d191793cac2c46/bin/examples/AddConfigExample.swf
--------------------------------------------------------------------------------
/bin/examples/AddLazyExample.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matan/AssetLoader/e717ee7f410439ba2880621a70d191793cac2c46/bin/examples/AddLazyExample.swf
--------------------------------------------------------------------------------
/bin/examples/SoundLoaderOnReadyExample.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matan/AssetLoader/e717ee7f410439ba2880621a70d191793cac2c46/bin/examples/SoundLoaderOnReadyExample.swf
--------------------------------------------------------------------------------
/bin/examples/StatsMonitorExample.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matan/AssetLoader/e717ee7f410439ba2880621a70d191793cac2c46/bin/examples/StatsMonitorExample.swf
--------------------------------------------------------------------------------
/bin/examples/complex-queue-config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/bin/examples/simple-queue-config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/bin/testing/FlexTestSuite.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matan/AssetLoader/e717ee7f410439ba2880621a70d191793cac2c46/bin/testing/FlexTestSuite.swf
--------------------------------------------------------------------------------
/bin/testing/assets/InspectorTestAssets.fla:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matan/AssetLoader/e717ee7f410439ba2880621a70d191793cac2c46/bin/testing/assets/InspectorTestAssets.fla
--------------------------------------------------------------------------------
/bin/testing/assets/InspectorTestAssets.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matan/AssetLoader/e717ee7f410439ba2880621a70d191793cac2c46/bin/testing/assets/InspectorTestAssets.swf
--------------------------------------------------------------------------------
/bin/testing/assets/test/testCSS.css:
--------------------------------------------------------------------------------
1 | body
2 | {
3 | background-color:#d0e4fe;
4 | }
5 | h1
6 | {
7 | color:orange;
8 | text-align:center;
9 | }
10 | p
11 | {
12 | font-family:"Times New Roman";
13 | font-size:20px;
14 | }
--------------------------------------------------------------------------------
/bin/testing/assets/test/testIMAGE.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matan/AssetLoader/e717ee7f410439ba2880621a70d191793cac2c46/bin/testing/assets/test/testIMAGE.png
--------------------------------------------------------------------------------
/bin/testing/assets/test/testJSON.json:
--------------------------------------------------------------------------------
1 | {"base":"http://www.matan.co.za/AssetLoader/testAssets/","assets":[{"id":"SAMPLE_GROUP","preventCache":false,"assets":[{"src":"sampleTXT.txt","id":"SAMPLE_TXT"},{"src":"sampleJSON.json","id":"SAMPLE_JSON"},{"src":"sampleXML.xml","id":"SAMPLE_XML"},{"src":"sampleCSS.css","id":"SAMPLE_CSS"},{"src":"sampleZIP.zip","weight":3493,"id":"SAMPLE_BINARY"},{"src":"sampleSOUND.mp3","weight":"213 kb","id":"SAMPLE_SOUND"}],"connections":0},{"assets":[{"src":"sampleIMAGE.jpg","weight":"328.5 kb","id":"SAMPLE_IMAGE"},{"id":"SAMPLE_VIDEO","onDemand":true,"src":"sampleVIDEO.mp4","weight":"10 mb"},{"id":"SAMPLE_SWF","src":"sampleSWF.swf","weight":941410,"priority":1}],"preventCache":true},{"base":"/","id":"SAMPLE_ERROR","src":"fileThatDoesNotExist.php","type":"image","retries":5}],"connections":3}
--------------------------------------------------------------------------------
/bin/testing/assets/test/testSOUND.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matan/AssetLoader/e717ee7f410439ba2880621a70d191793cac2c46/bin/testing/assets/test/testSOUND.mp3
--------------------------------------------------------------------------------
/bin/testing/assets/test/testSWF.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matan/AssetLoader/e717ee7f410439ba2880621a70d191793cac2c46/bin/testing/assets/test/testSWF.swf
--------------------------------------------------------------------------------
/bin/testing/assets/test/testTXT.txt:
--------------------------------------------------------------------------------
1 | FlexUnit 4 is under an MIT license.
2 |
3 | Copyright (c) 2007 Digital Primates IT Consulting Group
4 |
5 | Permission is hereby granted, free of charge, to any person
6 | obtaining a copy of this software and associated documentation
7 | files (the "Software"), to deal in the Software without
8 | restriction, including without limitation the rights to use,
9 | copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | copies of the Software, and to permit persons to whom the
11 | Software is furnished to do so, subject to the following
12 | conditions:
13 |
14 | The above copyright notice and this permission notice shall be
15 | included in all copies or substantial portions of the Software.
16 |
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
19 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
21 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
22 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
24 | OTHER DEALINGS IN THE SOFTWARE.
25 |
26 | http://flexunit.org/
--------------------------------------------------------------------------------
/bin/testing/assets/test/testVIDEO.flv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matan/AssetLoader/e717ee7f410439ba2880621a70d191793cac2c46/bin/testing/assets/test/testVIDEO.flv
--------------------------------------------------------------------------------
/bin/testing/assets/test/testXML.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/bin/testing/assets/test/testZIP.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matan/AssetLoader/e717ee7f410439ba2880621a70d191793cac2c46/bin/testing/assets/test/testZIP.zip
--------------------------------------------------------------------------------
/build.properties:
--------------------------------------------------------------------------------
1 | #Properties file for build.xml
2 | project.name = AssetLoader
3 |
4 | #Version number for current AssetLoader and AS3Singals releases
5 | assetloader.ver.num = v2.5.1
6 | as3.signals.version = v0.8
7 | project.name.versioned = ${project.name}-${assetloader.ver.num}
8 | as3.signals.name.versioned = as3-signals-${as3.signals.version}
9 | as3.corelib.json.name = as3corelib-json
10 |
11 | #build locations
12 | asdoc.loc = ${FLEX_HOME}/bin/asdoc
13 | main.src.loc = ${basedir}/src
14 | test.src.loc = ${basedir}/src_unit
15 | exam.src.loc = ${basedir}/src_examples
16 | bin.loc = ${basedir}/bin
17 | report.loc = ${basedir}/report
18 | dist.loc = ${basedir}/dist
19 | doc.loc = ${basedir}/doc
20 | lib.loc = ${basedir}/build/libs
21 |
--------------------------------------------------------------------------------
/build.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 | [clean] Removing Build and Report directories
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | [clean] Build and Report directories removed
43 |
44 |
45 |
46 |
47 | [init] Creating Bin and Report directories
48 |
49 |
50 | [init] Bin and Report directories created
51 |
52 |
53 |
54 |
55 | [compile] Compiling release SWC
56 | [compile] Using Flex SDK at: ${FLEX_HOME}
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 | [compile] Release SWC ${project.name.versioned}.swc created successfully
71 |
72 |
73 |
74 |
75 | [test] Running Unit Tests
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 | [test] Running SWF ${build.loc}/testing/FlexTestSuite.swf
94 |
95 |
96 |
102 | [test] Finished running Unit Tests
103 |
104 |
105 |
106 |
107 | [asdoc] Generating ASDOC documentation
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 | [asdoc] ASDOC documentation generated successfully
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 | [package] Packaging Release
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 | [package] Release packaged successfully
181 |
182 |
183 |
--------------------------------------------------------------------------------
/build/libs/as3-signals-v0.8.swc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matan/AssetLoader/e717ee7f410439ba2880621a70d191793cac2c46/build/libs/as3-signals-v0.8.swc
--------------------------------------------------------------------------------
/build/libs/as3corelib-json.swc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matan/AssetLoader/e717ee7f410439ba2880621a70d191793cac2c46/build/libs/as3corelib-json.swc
--------------------------------------------------------------------------------
/build/libs/flexunit/License.txt:
--------------------------------------------------------------------------------
1 | FlexUnit 4 is under an MIT license.
2 |
3 | Copyright (c) 2007 Digital Primates IT Consulting Group
4 |
5 | Permission is hereby granted, free of charge, to any person
6 | obtaining a copy of this software and associated documentation
7 | files (the "Software"), to deal in the Software without
8 | restriction, including without limitation the rights to use,
9 | copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | copies of the Software, and to permit persons to whom the
11 | Software is furnished to do so, subject to the following
12 | conditions:
13 |
14 | The above copyright notice and this permission notice shall be
15 | included in all copies or substantial portions of the Software.
16 |
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
19 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
21 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
22 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
24 | OTHER DEALINGS IN THE SOFTWARE.
25 |
26 | http://flexunit.org/
--------------------------------------------------------------------------------
/build/libs/flexunit/as3-signals-utilities-async-v0.8.swc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matan/AssetLoader/e717ee7f410439ba2880621a70d191793cac2c46/build/libs/flexunit/as3-signals-utilities-async-v0.8.swc
--------------------------------------------------------------------------------
/build/libs/flexunit/flexUnitTasks-4.1.0-8-javadoc.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matan/AssetLoader/e717ee7f410439ba2880621a70d191793cac2c46/build/libs/flexunit/flexUnitTasks-4.1.0-8-javadoc.jar
--------------------------------------------------------------------------------
/build/libs/flexunit/flexUnitTasks-4.1.0-8-sources.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matan/AssetLoader/e717ee7f410439ba2880621a70d191793cac2c46/build/libs/flexunit/flexUnitTasks-4.1.0-8-sources.jar
--------------------------------------------------------------------------------
/build/libs/flexunit/flexUnitTasks-4.1.0-8.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matan/AssetLoader/e717ee7f410439ba2880621a70d191793cac2c46/build/libs/flexunit/flexUnitTasks-4.1.0-8.jar
--------------------------------------------------------------------------------
/build/libs/flexunit/flexunit-4.1.0-8-flex_4.1.0.16076.swc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matan/AssetLoader/e717ee7f410439ba2880621a70d191793cac2c46/build/libs/flexunit/flexunit-4.1.0-8-flex_4.1.0.16076.swc
--------------------------------------------------------------------------------
/build/libs/flexunit/flexunit-aircilistener-4.1.0-8-4.1.0.16076.swc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matan/AssetLoader/e717ee7f410439ba2880621a70d191793cac2c46/build/libs/flexunit/flexunit-aircilistener-4.1.0-8-4.1.0.16076.swc
--------------------------------------------------------------------------------
/build/libs/flexunit/flexunit-cilistener-4.1.0-8-4.1.0.16076.swc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matan/AssetLoader/e717ee7f410439ba2880621a70d191793cac2c46/build/libs/flexunit/flexunit-cilistener-4.1.0-8-4.1.0.16076.swc
--------------------------------------------------------------------------------
/build/libs/flexunit/flexunit-flexcoverlistener-4.1.0-8-4.1.0.16076.swc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matan/AssetLoader/e717ee7f410439ba2880621a70d191793cac2c46/build/libs/flexunit/flexunit-flexcoverlistener-4.1.0-8-4.1.0.16076.swc
--------------------------------------------------------------------------------
/build/libs/flexunit/flexunit-uilistener-4.1.0-8-4.1.0.16076.swc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matan/AssetLoader/e717ee7f410439ba2880621a70d191793cac2c46/build/libs/flexunit/flexunit-uilistener-4.1.0-8-4.1.0.16076.swc
--------------------------------------------------------------------------------
/build/libs/flexunit/fluint-extensions-4.1.0-8-4.1.0.16076.swc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Matan/AssetLoader/e717ee7f410439ba2880621a70d191793cac2c46/build/libs/flexunit/fluint-extensions-4.1.0-8-4.1.0.16076.swc
--------------------------------------------------------------------------------
/src/org/assetloader/AssetLoader.as:
--------------------------------------------------------------------------------
1 | package org.assetloader
2 | {
3 | import org.assetloader.base.AssetLoaderBase;
4 | import org.assetloader.base.AssetLoaderError;
5 | import org.assetloader.base.AssetType;
6 | import org.assetloader.base.Param;
7 | import org.assetloader.core.IAssetLoader;
8 | import org.assetloader.core.ILoader;
9 | import org.assetloader.parsers.URLParser;
10 | import org.assetloader.signals.ErrorSignal;
11 | import org.assetloader.signals.LoaderSignal;
12 |
13 | import flash.net.URLRequest;
14 |
15 | /**
16 | * @author Matan Uberstein
17 | */
18 | public class AssetLoader extends AssetLoaderBase implements IAssetLoader
19 | {
20 | /**
21 | * @private
22 | */
23 | protected var _onChildOpen : LoaderSignal;
24 | /**
25 | * @private
26 | */
27 | protected var _onChildError : ErrorSignal;
28 | /**
29 | * @private
30 | */
31 | protected var _onChildComplete : LoaderSignal;
32 |
33 | public function AssetLoader(id : String = "PrimaryGroup")
34 | {
35 | super(id);
36 | }
37 |
38 | /**
39 | * @private
40 | */
41 | override protected function initSignals() : void
42 | {
43 | super.initSignals();
44 | _onChildOpen = new LoaderSignal(ILoader);
45 | _onChildError = new ErrorSignal(ILoader);
46 | _onChildComplete = new LoaderSignal(ILoader);
47 | }
48 |
49 | /**
50 | * @inheritDoc
51 | */
52 | public function addConfig(config : String) : void
53 | {
54 | var urlParser : URLParser = new URLParser(config);
55 | if(urlParser.isValid)
56 | {
57 | var loader : ILoader = _loaderFactory.produce("config", AssetType.TEXT, new URLRequest(config));
58 | loader.setParam(Param.PREVENT_CACHE, true);
59 |
60 | loader.onError.add(error_handler);
61 | loader.onComplete.add(configLoader_complete_handler);
62 | loader.start();
63 | }
64 | else
65 | {
66 | try
67 | {
68 | configParser.parse(this, config);
69 | }
70 | catch(error : Error)
71 | {
72 | throw new AssetLoaderError(AssetLoaderError.COULD_NOT_PARSE_CONFIG(_id, error.message), error.errorID);
73 | }
74 | }
75 | }
76 |
77 | /**
78 | * @inheritDoc
79 | */
80 | override public function start() : void
81 | {
82 | _data = _assets;
83 | _invoked = true;
84 | _stopped = false;
85 |
86 | sortIdsByPriority();
87 |
88 | if(numConnections == 0)
89 | numConnections = _numLoaders;
90 |
91 | super.start();
92 |
93 | for(var k : int = 0;k < numConnections;k++)
94 | {
95 | startNextLoader();
96 | }
97 | }
98 |
99 | /**
100 | * @inheritDoc
101 | */
102 | public function startLoader(id : String) : void
103 | {
104 | var loader : ILoader = getLoader(id);
105 | if(loader)
106 | loader.start();
107 |
108 | updateTotalBytes();
109 | }
110 |
111 | /**
112 | * @inheritDoc
113 | */
114 | override public function stop() : void
115 | {
116 | var loader : ILoader;
117 |
118 | for(var i : int = 0;i < _numLoaders;i++)
119 | {
120 | loader = getLoader(_ids[i]);
121 |
122 | if(!loader.loaded)
123 | loader.stop();
124 | }
125 |
126 | super.stop();
127 | }
128 |
129 | // --------------------------------------------------------------------------------------------------------------------------------//
130 | // PROTECTED FUNCTIONS
131 | // --------------------------------------------------------------------------------------------------------------------------------//
132 | /**
133 | * @private
134 | */
135 | protected function sortIdsByPriority() : void
136 | {
137 | var priorities : Array = [];
138 | for(var i : int = 0;i < _numLoaders;i++)
139 | {
140 | var loader : ILoader = getLoader(_ids[i]);
141 | priorities.push(loader.getParam(Param.PRIORITY));
142 | }
143 |
144 | var sortedIndexs : Array = priorities.sort(Array.NUMERIC | Array.DESCENDING | Array.RETURNINDEXEDARRAY);
145 | var idsCopy : Array = _ids.concat();
146 |
147 | for(var j : int = 0;j < _numLoaders;j++)
148 | {
149 | _ids[j] = idsCopy[sortedIndexs[j]];
150 | }
151 | }
152 |
153 | /**
154 | * @private
155 | */
156 | protected function startNextLoader() : void
157 | {
158 | if(_invoked)
159 | {
160 | var loader : ILoader;
161 | var ON_DEMAND : String = Param.ON_DEMAND;
162 | for(var i : int = 0;i < _numLoaders;i++)
163 | {
164 | loader = getLoader(_ids[i]);
165 |
166 | if(!loader.loaded && !loader.failed && !loader.getParam(ON_DEMAND))
167 | {
168 | if(!loader.invoked || (loader.invoked && loader.stopped))
169 | {
170 | startLoader(loader.id);
171 | return;
172 | }
173 | }
174 | }
175 | }
176 | }
177 |
178 | /**
179 | * @private
180 | */
181 | protected function checkForComplete(signal : LoaderSignal) : void
182 | {
183 | var sum : int = _failOnError ? _numLoaded : _numLoaded + _numFailed;
184 | if(sum == _numLoaders)
185 | super.complete_handler(signal, _assets);
186 | else
187 | startNextLoader();
188 | }
189 |
190 | // --------------------------------------------------------------------------------------------------------------------------------//
191 | // PROTECTED HANDLERS
192 | // --------------------------------------------------------------------------------------------------------------------------------//
193 | /**
194 | * @private
195 | */
196 | override protected function open_handler(signal : LoaderSignal) : void
197 | {
198 | _inProgress = true;
199 | _onChildOpen.dispatch(this, signal.loader);
200 | super.open_handler(signal);
201 | }
202 |
203 | /**
204 | * @private
205 | */
206 | override protected function error_handler(signal : ErrorSignal) : void
207 | {
208 | var loader : ILoader = signal.loader;
209 |
210 | _failedIds.push(loader.id);
211 | _numFailed = _failedIds.length;
212 |
213 | _onChildError.dispatch(this, signal.type, signal.message, loader);
214 | super.error_handler(signal);
215 |
216 | if(!_failOnError)
217 | checkForComplete(signal);
218 | else
219 | startNextLoader();
220 | }
221 |
222 | /**
223 | * @private
224 | */
225 | override protected function complete_handler(signal : LoaderSignal, data : * = null) : void
226 | {
227 | var loader : ILoader = signal.loader;
228 |
229 | removeListeners(loader);
230 |
231 | _assets[loader.id] = loader.data;
232 | _loadedIds.push(loader.id);
233 | _numLoaded = _loadedIds.length;
234 |
235 | _onChildComplete.dispatch(this, signal.loader);
236 |
237 | checkForComplete(signal);
238 | }
239 |
240 | /**
241 | * @private
242 | */
243 | protected function configLoader_complete_handler(signal : LoaderSignal, data : *) : void
244 | {
245 | var loader : ILoader = signal.loader;
246 | loader.onComplete.remove(configLoader_complete_handler);
247 | loader.onError.remove(error_handler);
248 |
249 | if(!configParser.isValid(loader.data))
250 | _onError.dispatch(this, "config-error", "Could not parse config after it has been loaded.");
251 | else
252 | {
253 | addConfig(loader.data);
254 | _onConfigLoaded.dispatch(this);
255 | }
256 |
257 | loader.destroy();
258 | }
259 |
260 | /**
261 | * @inheritDoc
262 | */
263 | public function get onChildOpen() : LoaderSignal
264 | {
265 | return _onChildOpen;
266 | }
267 |
268 | /**
269 | * @inheritDoc
270 | */
271 | public function get onChildError() : ErrorSignal
272 | {
273 | return _onChildError;
274 | }
275 |
276 | /**
277 | * @inheritDoc
278 | */
279 | public function get onChildComplete() : LoaderSignal
280 | {
281 | return _onChildComplete;
282 | }
283 | }
284 | }
--------------------------------------------------------------------------------
/src/org/assetloader/base/AssetLoaderError.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.base
2 | {
3 |
4 | /**
5 | * AssetLoader errors.
6 | *
7 | * @author Matan Uberstein
8 | */
9 | public class AssetLoaderError extends Error
10 | {
11 | public static const INVALID_URL : String = "Asset's url is invalid.";
12 | public static const ASSET_TYPE_NOT_RECOGNIZED : String = "Asset type not recognized. Try an asset type found on org.assetloader.base.AssetType .";
13 | public static const ASSET_AUTO_TYPE_NOT_FOUND : String = "Could not determine asset's type automatically. Please set the asset's type.";
14 | public static const ALREADY_CONTAINS_LOADER : String = "Already contains this instance of ILoader.";
15 | public static const DOESNT_CONTAIN_LOADER : String = "Does not contain this instance of ILoader, thus it cannot be removed.";
16 |
17 | public function AssetLoaderError(message : * = "", id : * = 0)
18 | {
19 | super("[AssetLoaderError] " + message, id);
20 | }
21 |
22 | public static function COULD_NOT_PARSE_CONFIG(id : String, message : String) : String
23 | {
24 | return "AssetLoader (" + id + "), Could not parse config, message from parser: " + message;
25 | }
26 |
27 | public static function ALREADY_CONTAINS_LOADER_WITH_ID(parentId : String, childId : String) : String
28 | {
29 | return "AssetLoader (" + parentId + ") already contains a child with the same id (" + childId + ").";
30 | }
31 |
32 | public static function CIRCULAR_REFERENCE_FOUND(id : String) : String
33 | {
34 | return "AssetLoader (" + id + ") has detected that somewhere in it's loading queue it contains itself.";
35 | }
36 |
37 | public static function ALREADY_CONTAINED_BY_OTHER(id : String, currentParentId : String) : String
38 | {
39 | return "Loader (" + id + ") is already contained by IAssetLoader (" + currentParentId + "). Remove from parent first.";
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/src/org/assetloader/base/AssetType.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.base
2 | {
3 |
4 | /**
5 | * @author Matan Uberstein
6 | *
7 | * Asset type constants.
8 | */
9 | public class AssetType
10 | {
11 | public static const AUTO : String = "AUTO";
public static const GROUP : String = "GROUP";
12 |
13 | public static const TEXT : String = "TEXT";
14 | public static const JSON : String = "JSON";
public static const XML : String = "XML";
public static const CSS : String = "CSS";
15 |
16 | public static const BINARY : String = "BINARY";
17 |
18 | public static const DISPLAY_OBJECT : String = "DISPLAY_OBJECT";
public static const SWF : String = "SWF";
public static const IMAGE : String = "IMAGE";
public static const SOUND : String = "SOUND";
19 | public static const VIDEO : String = "VIDEO";
}
20 | }
21 |
--------------------------------------------------------------------------------
/src/org/assetloader/base/LoaderFactory.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.base
2 | {
3 | import org.assetloader.parsers.URLParser;
4 | import org.assetloader.AssetLoader;
5 | import org.assetloader.core.ILoader;
6 | import org.assetloader.core.IParam;
7 | import org.assetloader.loaders.BinaryLoader;
8 | import org.assetloader.loaders.CSSLoader;
9 | import org.assetloader.loaders.DisplayObjectLoader;
10 | import org.assetloader.loaders.ImageLoader;
11 | import org.assetloader.loaders.JSONLoader;
12 | import org.assetloader.loaders.SWFLoader;
13 | import org.assetloader.loaders.SoundLoader;
14 | import org.assetloader.loaders.TextLoader;
15 | import org.assetloader.loaders.VideoLoader;
16 | import org.assetloader.loaders.XMLLoader;
17 |
18 | import flash.net.URLRequest;
19 |
20 | /**
21 | * LoaderFactory purly generates ILoader instances.
22 | *
23 | * @see org.assetloader.core.ILoader
24 | *
25 | * @author Matan Uberstein
26 | */
27 | public class LoaderFactory
28 | {
29 | /**
30 | * @private
31 | */
32 | protected var _loader : AbstractLoader;
33 |
34 | public function LoaderFactory()
35 | {
36 | }
37 |
38 | /**
39 | * Produces an ILoader instance according to parameters passed.
40 | *
41 | * @param id Unique Loader id.
42 | * @param type Type of the new ILoader.
43 | * @param request URLRequest to be loaded.
44 | * @param params Rest argument of parameters to be passed to ILoader.
45 | *
46 | * @return Resulting ILoader.
47 | *
48 | * @see org.assetloader.base.AssetType
* @see org.assetloader.base.Param
* @see org.assetloader.core.ILoader
49 | */
50 | public function produce(id : String, type : String = "AUTO", request : URLRequest = null, params : Array = null) : ILoader
51 | {
52 | if(request)
53 | {
54 | var urlParser : URLParser = new URLParser(request.url);
55 | if(urlParser.isValid)
56 | {
57 | if(type == AssetType.AUTO)
58 | type = getTypeFromExtension(urlParser.fileExtension);
59 | }
60 | else
61 | throw new AssetLoaderError(AssetLoaderError.INVALID_URL);
62 |
63 | }
64 | else if(type == AssetType.AUTO)
65 | type = AssetType.GROUP;
66 |
67 | constructLoader(type, id, request);
68 |
69 | if(params)
70 | processParams(params);
71 |
72 | return _loader;
73 | }
74 |
75 | /**
76 | * @private
77 | */
78 | protected function processParams(assetParams : Array) : void
79 | {
80 | var pL : int = assetParams.length;
81 | for(var i : int = 0;i < pL;i++)
82 | {
83 | if(assetParams[i] is IParam)
84 | {
85 | var param : IParam = assetParams[i];
86 | _loader.setParam(param.id, param.value);
87 | }
88 | else if(assetParams[i] is Array)
89 | processParams(assetParams[i]);
90 | }
91 | }
92 |
93 | /**
94 | * @private
95 | */
96 | protected function getTypeFromExtension(extension : String) : String
97 | {
98 | if(!extension)
99 | extension = "";
100 |
101 | extension = extension.toLowerCase();
102 |
103 | var textExt : Array = ["txt", "js", "html", "htm", "php", "asp", "aspx", "jsp", "cfm"];
104 | var imageExt : Array = ["jpg", "jpeg", "png", "gif"];
105 | var videoExt : Array = ["flv", "f4v", "f4p", "mp4", "mov"];
106 |
107 | if(testExtenstion(textExt, extension))
108 | return AssetType.TEXT;
109 |
110 | if(extension == "json")
111 | return AssetType.JSON;
112 |
113 | if(extension == "xml")
114 | return AssetType.XML;
115 |
116 | if(extension == "css")
117 | return AssetType.CSS;
118 |
119 | if(extension == "zip")
120 | return AssetType.BINARY;
121 |
122 | if(extension == "swf")
123 | return AssetType.SWF;
124 |
125 | if(testExtenstion(imageExt, extension))
126 | return AssetType.IMAGE;
127 |
128 | if(extension == "mp3")
129 | return AssetType.SOUND;
130 |
131 | if(testExtenstion(videoExt, extension))
132 | return AssetType.VIDEO;
133 |
134 | throw new AssetLoaderError(AssetLoaderError.ASSET_AUTO_TYPE_NOT_FOUND);
135 |
136 | return "";
137 | }
138 |
139 | /**
140 | * @private
141 | */
142 | protected function testExtenstion(extensions : Array, extension : String) : Boolean
143 | {
144 | if(extensions.indexOf(extension) != -1)
145 | return true;
146 | return false;
147 | }
148 |
149 | /**
150 | * @private
151 | */
152 | protected function constructLoader(type : String, id : String, request : URLRequest) : void
153 | {
154 | switch(type)
155 | {
156 | case AssetType.TEXT:
157 | _loader = new TextLoader(request, id);
158 | break;
159 |
160 | case AssetType.JSON:
161 | _loader = new JSONLoader(request, id);
162 | break;
163 |
164 | case AssetType.XML:
165 | _loader = new XMLLoader(request, id);
166 | break;
167 |
168 | case AssetType.CSS:
169 | _loader = new CSSLoader(request, id);
170 | break;
171 |
172 | case AssetType.BINARY:
173 | _loader = new BinaryLoader(request, id);
174 | break;
175 |
176 | case AssetType.DISPLAY_OBJECT:
177 | _loader = new DisplayObjectLoader(request, id);
178 | break;
179 |
180 | case AssetType.SWF:
181 | _loader = new SWFLoader(request, id);
182 | break;
183 |
184 | case AssetType.IMAGE:
185 | _loader = new ImageLoader(request, id);
186 | break;
187 |
188 | case AssetType.SOUND:
189 | _loader = new SoundLoader(request, id);
190 | break;
191 |
192 | case AssetType.VIDEO:
193 | _loader = new VideoLoader(request, id);
194 | break;
195 |
196 | case AssetType.GROUP:
197 | _loader = new AssetLoader(id);
198 | break;
199 |
200 | default:
201 | throw new AssetLoaderError(AssetLoaderError.ASSET_TYPE_NOT_RECOGNIZED);
202 | }
203 | }
204 | }
205 | }
206 |
--------------------------------------------------------------------------------
/src/org/assetloader/base/LoaderStats.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.base
2 | {
3 | import org.assetloader.core.ILoadStats;
4 |
5 | import flash.utils.getTimer;
6 |
7 | /**
8 | * @author Matan Uberstein
9 | */
10 | public class LoaderStats implements ILoadStats
11 | {
12 | /**
13 | * @private
14 | */
15 | protected var _latency : Number = 0;
16 | /**
17 | * @private
18 | */
19 | protected var _speed : Number = 0;
20 | /**
21 | * @private
22 | */
23 | protected var _averageSpeed : Number = 0;
24 | /**
25 | * @private
26 | */
27 | protected var _progress : Number = 0;
28 | /**
29 | * @private
30 | */
31 | protected var _totalTime : Number = 0;
32 |
33 | /**
34 | * @private
35 | */
36 | protected var _numOpened : int = 0;
37 | /**
38 | * @private
39 | */
40 | protected var _totalLatency : Number = 0;
41 |
42 | /**
43 | * @private
44 | */
45 | protected var _bytesLoaded : uint = 0;
46 | /**
47 | * @private
48 | */
49 | protected var _bytesTotal : uint = 0;
50 |
51 | /**
52 | * @private
53 | */
54 | protected var _startTime : int;
55 | /**
56 | * @private
57 | */
58 | protected var _openTime : int;
59 | /**
60 | * @private
61 | */
62 | protected var _updateTime : int;
63 |
64 | public function LoaderStats()
65 | {
66 | }
67 |
68 | /**
69 | * @inheritDoc
70 | */
71 | public function start() : void
72 | {
73 | _startTime = getTimer();
74 |
75 | _latency = 0;
76 | _speed = 0;
77 | _averageSpeed = 0;
78 | _progress = 0;
79 | _totalTime = 0;
80 | }
81 |
82 | /**
83 | * @inheritDoc
84 | */
85 | public function open() : void
86 | {
87 | _numOpened++;
88 | _openTime = getTimer();
89 |
90 | _totalLatency += _openTime - _startTime;
91 | _latency = _totalLatency / _numOpened;
92 |
93 | update(0, 0);
94 | }
95 |
96 | /**
97 | * @inheritDoc
98 | */
99 | public function done() : void
100 | {
101 | update(_bytesTotal, _bytesTotal);
102 |
103 | _totalTime = getTimer() - _startTime;
104 | }
105 |
106 | /**
107 | * @inheritDoc
108 | */
109 | public function update(bytesLoaded : uint, bytesTotal : uint) : void
110 | {
111 | _bytesTotal = bytesTotal;
112 |
113 | if(bytesLoaded > 0)
114 | {
115 | var bytesDif : uint = bytesLoaded - _bytesLoaded;
116 | _bytesLoaded = bytesLoaded;
117 |
118 | _progress = (_bytesLoaded / _bytesTotal) * 100;
119 |
120 | var currentTime : int = getTimer();
121 | var updateTimeDif : int = currentTime - _updateTime;
122 |
123 | if(updateTimeDif > 0)
124 | {
125 | _updateTime = currentTime;
126 | _speed = (bytesDif / 1024) / (updateTimeDif / 1000);
127 |
128 | var totalTimeDif : Number = (_updateTime - _openTime) / 1000;
129 | _averageSpeed = (_bytesLoaded / 1024) / totalTimeDif;
130 | }
131 | }
132 | }
133 |
134 | /**
135 | * @inheritDoc
136 | */
137 | public function reset() : void
138 | {
139 | _startTime = NaN;
140 | _openTime = NaN;
141 | _updateTime = NaN;
142 |
143 | _latency = 0;
144 | _speed = 0;
145 | _averageSpeed = 0;
146 | _progress = 0;
147 | _totalTime = 0;
148 |
149 | _bytesLoaded = 0;
150 | _bytesTotal = 0;
151 |
152 | _numOpened = 0;
153 | _totalLatency = 0;
154 | }
155 |
156 | /**
157 | * @inheritDoc
158 | */
159 | public function get latency() : Number
160 | {
161 | return _latency;
162 | }
163 |
164 | /**
165 | * @inheritDoc
166 | */
167 | public function get speed() : Number
168 | {
169 | return _speed;
170 | }
171 |
172 | /**
173 | * @inheritDoc
174 | */
175 | public function get averageSpeed() : Number
176 | {
177 | return _averageSpeed;
178 | }
179 |
180 | /**
181 | * @inheritDoc
182 | */
183 | public function get progress() : Number
184 | {
185 | return _progress;
186 | }
187 |
188 | /**
189 | * @inheritDoc
190 | */
191 | public function get totalTime() : Number
192 | {
193 | return _totalTime;
194 | }
195 |
196 | /**
197 | * @inheritDoc
198 | */
199 | public function get bytesLoaded() : uint
200 | {
201 | return _bytesLoaded;
202 | }
203 |
204 | /**
205 | * @inheritDoc
206 | */
207 | public function get bytesTotal() : uint
208 | {
209 | return _bytesTotal;
210 | }
211 |
212 | /**
213 | * @inheritDoc
214 | */
215 | public function set bytesTotal(bytesTotal : uint) : void
216 | {
217 | _bytesTotal = bytesTotal;
218 | }
219 | }
220 | }
221 |
--------------------------------------------------------------------------------
/src/org/assetloader/base/Param.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.base
2 | {
3 | import org.assetloader.core.IParam;
4 |
5 | /**
6 | * Provides assets with parameters.
7 | */
8 | public class Param implements IParam
9 | {
10 | /**
11 | * Adds a base path to the url. e.g. request.url = base + url;
12 | *
13 | *
Use: All asset types.
14 | * Type: String
15 | */
16 | public static const BASE : String = "BASE";
17 |
18 | /**
19 | * Adds time stamp to url, which makes each call unique.
20 | *
21 | * Use: All asset types.
22 | * Type: Boolean
23 | * Default: false
24 | */
25 | public static const PREVENT_CACHE : String = "PREVENT_CACHE";
26 |
27 | /**
28 | * Amount of times the loading is retried.
29 | *
30 | * Use: All asset types except Group.
31 | * Type: uint
32 | * Default: 3
33 | */
public static const RETRIES : String = "RETRIES";
34 |
35 | /**
36 | * Amount of times the loading is retried.
37 | *
38 | * Use: All asset types.
39 | * Type: int
40 | * Default: Automatically determined according to when asset is added. Starts at 0 (zero) and decreases with each add.
41 | * e.g. Adding three assets one after the other will produce priority values of 0, -1, -2.
42 | * This list is then sorted decendingly, thus thus asset's with higher priority are loaded first.
43 | * Children ILoader of IAssetLoader will NOT inherit this param.
44 | */
45 | public static const PRIORITY : String = "PRIORITY";
46 |
47 | /**
48 | * Set true if you DON'T want the asset to from part of the loading queue.
49 | * This way you must start the asset's loading manually via IAssetLoader startAsset method.
50 | *
51 | * Use: All asset types.
52 | * Type: Boolean
53 | * Default: false
54 | * Children ILoader of IAssetLoader will NOT inherit this param.
55 | */
56 | public static const ON_DEMAND : String = "ON_DEMAND";
57 |
58 | /**
59 | * Sets the bytesTotal amount of the file, this will improve accuracy of the
60 | * progress bar. This is optional, because the bytesTotal is retreived from the server
61 | * when the progress events start coming through. You can set this with a vague value as
62 | * it will be overritten by the value retreived from the server.
63 | *
64 | * Use: All asset types.
65 | * Type: unit
66 | * Default: 0
67 | * Children ILoader of IAssetLoader will NOT inherit this param.
68 | */
69 | public static const WEIGHT : String = "WEIGHT";
70 |
71 | /**
72 | * Sets the URLRequest
's headers.
73 | *
74 | * Use: All asset types except Video.
75 | * Type: Array
76 | *
77 | * @see flash.net.URLRequestHeader
78 | */
public static const HEADERS : String = "HEADERS";
79 |
80 | /**
81 | * Use: DisplayObject, Image and Swf asset types.
82 | * Type: LoaderContext
83 | *
84 | * @see flash.system.LoaderContext
85 | */
public static const LOADER_CONTEXT : String = "LOADER_CONTEXT";
86 |
87 | /**
88 | * Sets BitmapData
's transparentcy.
89 | *
90 | * Use: Image asset type.
91 | * Type: Boolean
92 | *
93 | * @see flash.display.BitmapData
94 | */
95 | public static const TRANSPARENT : String = "TRANSPARENT";
96 |
97 | /**
98 | * Sets BitmapData
's fill color.
99 | *
100 | * Use: Image asset type.
101 | * Type: uint
102 | *
103 | * @see flash.display.BitmapData
104 | */
105 | public static const FILL_COLOR : String = "FILL_COLOR";
106 |
107 | /**
108 | * Sets BitmapData
's matrix.
109 | *
110 | * Use: Image asset type.
111 | * Type: Matrix
112 | *
113 | * @see flash.geom.Matrix
114 | * @see flash.display.BitmapData
115 | */
116 | public static const MATRIX : String = "MATRIX";
117 |
118 | /**
119 | * Sets BitmapData
's color transform.
120 | *
121 | * Use: Image asset type.
122 | * Type: ColorTransform
123 | *
124 | * @see flash.geom.ColorTransform
125 | * @see flash.display.BitmapData
126 | */
127 | public static const COLOR_TRANSFROM : String = "COLOR_TRANSFROM";
128 |
129 | /**
130 | * Sets BitmapData
's blend mode.
131 | *
132 | * Use: Image asset type.
133 | * Type: String
134 | *
135 | * @see flash.display.BlendMode
136 | * @see flash.display.BitmapData
137 | */
138 | public static const BLEND_MODE : String = "BLEND_MODE";
139 |
140 | /**
141 | * Sets BitmapData
's clipping rectangle.
142 | *
143 | * Use: Image asset type.
144 | * Type: Rectangle
145 | *
146 | * @see flash.geom.Rectangle
147 | * @see flash.display.BitmapData
148 | */
149 | public static const CLIP_RECTANGLE : String = "CLIP_RECTANGLE";
150 |
151 | /**
152 | * Sets Bitmap
's pixel snapping.
153 | *
154 | * Use: Image asset type.
155 | * Type: String
156 | *
157 | * @see flash.display.Bitmap
158 | */
159 | public static const PIXEL_SNAPPING : String = "PIXEL_SNAPPING";
160 |
161 | /**
162 | * Sets Bitmap
and BitmapData
's smoothing property.
163 | *
164 | * Use: Image asset type.
165 | * Type: Boolean
166 | *
167 | * @see flash.display.Bitmap
168 | * @see flash.display.BitmapData
169 | */
170 | public static const SMOOTHING : String = "SMOOTHING";
171 |
172 | /**
173 | * Sets Sound
's load context.
174 | *
175 | * Use: Sound asset type.
176 | * Type: SoundLoaderContext
177 | *
178 | * @see flash.media.SoundLoaderContext
179 | */
180 | public static const SOUND_LOADER_CONTEXT : String = "SOUND_LOADER_CONTEXT";
181 |
182 | /**
183 | * If NetStream
should load cross-domain policy file.
184 | *
185 | * Use: Video asset type.
186 | * Type: Boolean
187 | *
188 | * @see flash.net.NetStream
189 | */
190 | public static const CHECK_POLICY_FILE : String = "CHECK_POLICY_FILE";
191 |
192 | /**
193 | * Adds NetStream
client callback Object
.
194 | *
195 | * Use: Video asset type.
196 | * Type: Object
197 | *
198 | * @see flash.net.NetStream
199 | */
200 | public static const CLIENT : String = "CLIENT";
201 |
202 | /**
203 | * Allows you to attach any object/instance to an ILoader.
204 | *
205 | * Use: All asset types.
206 | * Type: Any Type
207 | */
208 | public static const USER_DATA : String = "USER_DATA";
209 |
210 | /**
211 | * @private
212 | */
213 | protected var _id : String;
214 |
215 | /**
216 | * @private
217 | */
218 | protected var _value : *;
219 |
220 | /**
221 | * @param id Param id.
222 | * @param value Param value.
223 | */
224 | public function Param(id : String, value : *)
225 | {
226 | _id = id;
227 | _value = value;
228 | }
229 |
230 | /**
231 | * @inheritDoc
232 | */
233 | public function get id() : String
234 | {
235 | return _id;
236 | }
237 |
238 | /**
239 | * @inheritDoc
240 | */
241 | public function get value() : *
242 | {
243 | return _value;
244 | }
245 | }
246 | }
247 |
--------------------------------------------------------------------------------
/src/org/assetloader/base/StatsMonitor.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.base
2 | {
3 | import org.assetloader.core.ILoadStats;
4 | import org.assetloader.core.ILoader;
5 | import org.assetloader.signals.LoaderSignal;
6 | import org.assetloader.signals.ProgressSignal;
7 |
8 | /**
9 | * @author Matan Uberstein
10 | *
11 | * Consolidates multiple ILoader's stats.
12 | */
13 | public class StatsMonitor
14 | {
15 | /**
16 | * @private
17 | */
18 | protected var _loaders : Array;
19 | /**
20 | * @private
21 | */
22 | protected var _stats : ILoadStats;
23 |
24 | /**
25 | * @private
26 | */
27 | protected var _numLoaders : int;
28 | /**
29 | * @private
30 | */
31 | protected var _numComplete : int;
32 | /**
33 | * @private
34 | */
35 | protected var _ids : Array = [];
36 |
37 | /**
38 | * @private
39 | */
40 | protected var _onOpen : LoaderSignal;
41 | /**
42 | * @private
43 | */
44 | protected var _onProgress : ProgressSignal;
45 | /**
46 | * @private
47 | */
48 | protected var _onComplete : LoaderSignal;
49 |
50 | public function StatsMonitor()
51 | {
52 | _loaders = [];
53 | _stats = new LoaderStats();
54 |
55 | _onOpen = new LoaderSignal();
56 | _onProgress = new ProgressSignal();
57 | _onComplete = new LoaderSignal(ILoadStats);
58 | }
59 |
60 | /**
61 | * Adds ILoader for monitoring.
62 | *
63 | * @param loader Instance of ILoader or IAssetLoader.
64 | *
65 | * @throws org.assetloader.base.AssetLoaderError ALREADY_CONTAINS_LOADER
66 | */
67 | public function add(loader : ILoader) : void
68 | {
69 | if(_loaders.indexOf(loader) == -1)
70 | {
71 | loader.onStart.add(start_handler);
72 |
73 | _loaders.push(loader);
74 | _ids.push(loader.id);
75 | _numLoaders = _loaders.length;
76 | if(loader.loaded)
77 | _numComplete++;
78 | }
79 | else
80 | throw new AssetLoaderError(AssetLoaderError.ALREADY_CONTAINS_LOADER);
81 | }
82 |
83 | /**
84 | * Removes ILoader from monitoring.
85 | *
86 | * @param loader An instance of an ILoader already added.
87 | *
88 | * @throws org.assetloader.base.AssetLoaderError DOESNT_CONTAIN_LOADER
89 | */
90 | public function remove(loader : ILoader) : void
91 | {
92 | var index : int = _loaders.indexOf(loader);
93 | if(index != -1)
94 | {
95 | loader.onStart.remove(start_handler);
96 | removeListeners(loader);
97 |
98 | if(loader.loaded)
99 | _numComplete--;
100 |
101 | _loaders.splice(index, 1);
102 | _ids.splice(index, 1);
103 | _numLoaders = _loaders.length;
104 | }
105 | else
106 | throw new AssetLoaderError(AssetLoaderError.DOESNT_CONTAIN_LOADER);
107 | }
108 |
109 | /**
110 | * Removes all internal listeners and clears the monitoring list.
111 | *
112 | * Note: After calling destroy, this instance of StatsMonitor is still usable.
113 | * Simply rebuild your monitor list via the add() method.
114 | */
115 | public function destroy() : void
116 | {
117 | for each(var loader : ILoader in _loaders)
118 | {
119 | loader.onStart.remove(start_handler);
120 | removeListeners(loader);
121 | }
122 |
123 | _loaders = [];
124 | _numLoaders = 0;
125 | _numComplete = 0;
126 |
127 | _onOpen.removeAll();
128 | _onProgress.removeAll();
129 | _onComplete.removeAll();
130 | }
131 |
132 | /**
133 | * @private
134 | */
135 | protected function addListeners(loader : ILoader) : void
136 | {
137 | loader.onOpen.add(open_handler);
138 | loader.onProgress.add(progress_handler);
139 | loader.onComplete.add(complete_handler);
140 | }
141 |
142 | /**
143 | * @private
144 | */
145 | protected function removeListeners(loader : ILoader) : void
146 | {
147 | loader.onOpen.remove(open_handler);
148 | loader.onProgress.remove(progress_handler);
149 | loader.onComplete.remove(complete_handler);
150 | }
151 |
152 | /**
153 | * @private
154 | */
155 | protected function start_handler(signal : LoaderSignal) : void
156 | {
157 | for each(var loader : ILoader in _loaders)
158 | {
159 | loader.onStart.remove(start_handler);
160 | addListeners(loader);
161 | }
162 | _stats.start();
163 | }
164 |
165 | /**
166 | * @private
167 | */
168 | protected function open_handler(signal : LoaderSignal) : void
169 | {
170 | _stats.open();
171 | _onOpen.dispatch(signal.loader);
172 | }
173 |
174 | /**
175 | * @private
176 | */
177 | protected function progress_handler(signal : ProgressSignal) : void
178 | {
179 | var bytesLoaded : uint;
180 | var bytesTotal : uint;
181 | for each(var loader : ILoader in _loaders)
182 | {
183 | bytesLoaded += loader.stats.bytesLoaded;
184 | bytesTotal += loader.stats.bytesTotal;
185 | }
186 | _stats.update(bytesLoaded, bytesTotal);
187 |
188 | _onProgress.dispatch(signal.loader, _stats.latency, _stats.speed, _stats.averageSpeed, _stats.progress, _stats.bytesLoaded, _stats.bytesTotal);
189 | }
190 |
191 | /**
192 | * @private
193 | */
194 | protected function complete_handler(signal : LoaderSignal, payload : *) : void
195 | {
196 | _numComplete++;
197 | if(_numComplete == _numLoaders)
198 | {
199 | _stats.done();
200 | _onComplete.dispatch(null, _stats);
201 | }
202 | }
203 |
204 | /**
205 | * Checks whether the StatsMonitor contains an ILoader with id passed.
206 | *
207 | * @param id Id for the ILoader.
208 | *
209 | * @return Boolean
210 | */
211 | public function hasLoader(id : String) : Boolean
212 | {
213 | return (_ids.indexOf(id) != -1);
214 | }
215 |
216 | /**
217 | * Gets the load with id passed.
218 | *
219 | * @param id Id for the ILoader.
220 | *
221 | * @return ILoader.
222 | */
223 | public function getLoader(id : String) : ILoader
224 | {
225 | if(hasLoader(id))
226 | return _loaders[_ids.indexOf(id)];
227 | return null;
228 | }
229 |
230 | /**
231 | * All the ids of the ILoaders added to this StatsMonitor.
232 | *
233 | * @return Array of Strings
234 | */
235 | public function get ids() : Array
236 | {
237 | return _ids;
238 | }
239 |
240 | /**
241 | * Get the overall stats of all the ILoaders in the monitoring list.
242 | *
243 | * @return ILoadStats
244 | */
245 | public function get stats() : ILoadStats
246 | {
247 | return _stats;
248 | }
249 |
250 | /**
251 | * Dispatches each time a connection has been opend.
252 | *
253 | * HANDLER ARGUMENTS: (signal:LoaderSignal)
254 | *
255 | * - signal - The signal that dispatched.
256 | *
257 | *
258 | * @see org.assetloader.signals.LoaderSignal
259 | */
260 | public function get onOpen() : LoaderSignal
261 | {
262 | return _onOpen;
263 | }
264 |
265 | /**
266 | * Dispatches when loading progress has been made.
267 | *
268 | * HANDLER ARGUMENTS: (signal:ProgressSignal)
269 | *
270 | * - signal - The signal that dispatched.
271 | *
272 | *
273 | * @see org.assetloader.signals.ProgressSignal
274 | */
275 | public function get onProgress() : ProgressSignal
276 | {
277 | return _onProgress;
278 | }
279 |
280 | /**
281 | * Dispatches when the loading operations has completed.
282 | *
283 | * HANDLER ARGUMENTS: (signal:LoaderSignal, stats:ILoadStats)
284 | *
285 | * - signal - The signal that dispatched.
286 | * - stats - Consolidated stats.
287 | *
288 | *
289 | * @see org.assetloader.signals.LoaderSignal
290 | */
291 | public function get onComplete() : LoaderSignal
292 | {
293 | return _onComplete;
294 | }
295 |
296 | /**
297 | * Gets the amount of loaders added to the monitoring queue.
298 | *
299 | * @return int
300 | */
301 | public function get numLoaders() : int
302 | {
303 | return _numLoaders;
304 | }
305 |
306 | /**
307 | * Gets the amount of loaders that have finished loading.
308 | *
309 | * @return int
310 | */
311 | public function get numComplete() : int
312 | {
313 | return _numComplete;
314 | }
315 | }
316 | }
317 |
--------------------------------------------------------------------------------
/src/org/assetloader/core/IConfigParser.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.core
2 | {
3 |
4 | /**
5 | * Parses and builds loading queues from String data.
6 | *
7 | * @see org.assetloader.core.ILoader
8 | * @see org.assetloader.core.IAssetLoader
9 | *
10 | * @author Matan Uberstein
11 | */
12 | public interface IConfigParser
13 | {
14 | /**
15 | * Test data to see if it can be parsed.
16 | *
17 | * @param data String
18 | *
19 | * @return Boolean
20 | */
21 | function isValid(data : String) : Boolean;
22 |
23 | /**
24 | * Implematation should convert String into respective type and add the parsed
25 | * assets into their repective parent IAssetLoader
26 | *
27 | * @param assetloader IAssetLoader instance that will contain the parsed assets.
28 | * @param data String
29 | *
30 | * @see org.assetloader.base.vo.ConfigVO
31 | */
32 | function parse(assetloader : IAssetLoader, data : String) : void
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/src/org/assetloader/core/ILoadStats.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.core
2 | {
3 |
4 | /**
5 | * Calulates download stats.
6 | *
7 | * @author Matan Uberstein
8 | */
9 | public interface ILoadStats
10 | {
11 | /**
12 | * Records time when invoked. This should be called when you init a loading operation.
13 | */
14 | function start() : void
15 |
16 | /**
17 | * Records time difference between start and now to calculated latency.
18 | */
19 | function open() : void
20 |
21 | /**
22 | * Invoke when loading is complete.
23 | */
24 | function done() : void
25 | /**
26 | * Invoke when loading progress is made. This will updated the stats.
27 | * @param bytesLoaded The amount of bytes loaded.
28 | * @param bytesTotal The total amount of bytes for a loading operation.
29 | */
30 | function update(bytesLoaded : uint, bytesTotal : uint) : void
31 |
32 | /**
33 | * Resets all the values.
34 | */
35 | function reset() : void
36 |
37 | /**
38 | * Time between start and open.
39 | * @return Millisecond value.
40 | */
41 | function get latency() : Number
42 |
43 | /**
44 | * Current speed of download.
45 | * @return Kilobytes per second value.
46 | */
47 | function get speed() : Number
48 |
49 | /**
50 | * Average speed of download.
51 | * @return Kilobytes per second value.
52 | */
53 | function get averageSpeed() : Number
54 |
55 | /**
56 | * Current progress percentage of download.
57 | * @return Number between 0 and 100.
58 | */
59 | function get progress() : Number
60 |
61 | /**
62 | * Total time taken.
63 | * @return Number value in milliseconds
64 | */
65 | function get totalTime() : Number
66 |
67 | /**
68 | * @return Amount of bytes loaded.
69 | */
70 | function get bytesLoaded() : uint
71 |
72 | /**
73 | * @return Total amount of bytes to load.
74 | */
75 | function get bytesTotal() : uint
76 |
77 | /**
78 | * @param value The total amount of bytes for a loading operation.
79 | */
80 | function set bytesTotal(value : uint) : void
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/src/org/assetloader/core/IParam.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.core
2 | {
3 |
4 | /**
5 | * Holds parameter data for ILoader instances.
6 | *
7 | * @see org.assetloader.core.ILoader
8 | *
9 | * @author Matan Uberstein
10 | */
11 | public interface IParam
12 | {
13 | /**
14 | * Gets parameter id.
15 | *
16 | * @return id of parameter.
17 | * @see org.assetloader.base.Param
18 | */
19 | function get id() : String
20 | /**
21 | * Gets value of parameter.
22 | *
23 | * @return value
24 | */
25 | function get value() : *
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/org/assetloader/loaders/BaseLoader.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.loaders
2 | {
3 | import org.assetloader.parsers.URLParser;
4 |
5 | import flash.net.URLVariables;
6 |
7 | import org.assetloader.base.AbstractLoader;
8 | import org.assetloader.base.Param;
9 | import org.assetloader.core.ILoader;
10 |
11 | import flash.events.ErrorEvent;
12 | import flash.events.Event;
13 | import flash.events.HTTPStatusEvent;
14 | import flash.events.IEventDispatcher;
15 | import flash.events.IOErrorEvent;
16 | import flash.events.ProgressEvent;
17 | import flash.events.SecurityErrorEvent;
18 | import flash.net.URLRequest;
19 |
20 | /**
21 | * @author Matan Uberstein
22 | */
23 | public class BaseLoader extends AbstractLoader implements ILoader
24 | {
25 | /**
26 | * @private
27 | */
28 | protected var _eventDispatcher : IEventDispatcher;
29 |
30 | public function BaseLoader(request : URLRequest, type : String, id : String = null)
31 | {
32 | super(id || request.url, type, request);
33 | }
34 |
35 | /**
36 | * @inheritDoc
37 | */
38 | override public function start() : void
39 | {
40 | if(!_invoked)
41 | {
42 | _invoked = true;
43 | _stopped = false;
44 |
45 | _eventDispatcher = constructLoader();
46 |
47 | addListeners(_eventDispatcher);
48 |
49 | super.start();
50 |
51 | invokeLoading();
52 | }
53 | else
54 | {
55 | _invoked = false;
56 | stop();
57 | start();
58 | }
59 | }
60 |
61 | /**
62 | * @private
63 | */
64 | protected function constructLoader() : IEventDispatcher
65 | {
66 | return null;
67 | }
68 |
69 | /**
70 | * @private
71 | */
72 | protected function invokeLoading() : void
73 | {
74 | }
75 |
76 | /**
77 | * @inheritDoc
78 | */
79 | override public function stop() : void
80 | {
81 | removeListeners(_eventDispatcher);
82 | _eventDispatcher = null;
83 |
84 | super.stop();
85 | }
86 |
87 | /**
88 | * @inheritDoc
89 | */
90 | override public function destroy() : void
91 | {
92 | removeListeners(_eventDispatcher);
93 | _eventDispatcher = null;
94 |
95 | super.destroy();
96 | }
97 |
98 | // --------------------------------------------------------------------------------------------------------------------------------//
99 | // HANDLERS
100 | // --------------------------------------------------------------------------------------------------------------------------------//
101 | /**
102 | * @private
103 | */
104 | protected function error_handler(event : ErrorEvent) : void
105 | {
106 | if(_retryTally < getParam(Param.RETRIES) - 1)
107 | {
108 | _retryTally++;
109 | start();
110 | }
111 | else
112 | {
113 | _inProgress = false;
114 | _failed = true;
115 | removeListeners(_eventDispatcher);
116 | _onError.dispatch(this, event.type, event.text);
117 | }
118 | }
119 |
120 | /**
121 | * @private
122 | */
123 | protected function httpStatus_handler(event : HTTPStatusEvent) : void
124 | {
125 | _onHttpStatus.dispatch(this, event.status);
126 | }
127 |
128 | /**
129 | * @private
130 | */
131 | protected function open_handler(event : Event) : void
132 | {
133 | _stats.open();
134 | _inProgress = true;
135 | _onOpen.dispatch(this);
136 | }
137 |
138 | /**
139 | * @private
140 | */
141 | protected function progress_handler(event : ProgressEvent) : void
142 | {
143 | _stats.update(event.bytesLoaded, event.bytesTotal);
144 | _onProgress.dispatch(this, _stats.latency, _stats.speed, _stats.averageSpeed, _stats.progress, _stats.bytesLoaded, _stats.bytesTotal);
145 | }
146 |
147 | /**
148 | * @private
149 | */
150 | protected function complete_handler(event : Event) : void
151 | {
152 | _stats.done();
153 | _onProgress.dispatch(this, _stats.latency, _stats.speed, _stats.averageSpeed, _stats.progress, _stats.bytesLoaded, _stats.bytesTotal);
154 |
155 | _inProgress = false;
156 | _failed = false;
157 | _loaded = true;
158 | _onComplete.dispatch(this, _data);
159 | }
160 |
161 | // --------------------------------------------------------------------------------------------------------------------------------//
162 | // PROTECTED
163 | // --------------------------------------------------------------------------------------------------------------------------------//
164 | /**
165 | * @private
166 | */
167 | protected function addListeners(dispatcher : IEventDispatcher) : void
168 | {
169 | if(dispatcher)
170 | {
171 | dispatcher.addEventListener(IOErrorEvent.IO_ERROR, error_handler);
172 | dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, error_handler);
173 |
174 | dispatcher.addEventListener(Event.OPEN, open_handler);
175 | dispatcher.addEventListener(ProgressEvent.PROGRESS, progress_handler);
176 | dispatcher.addEventListener(Event.COMPLETE, complete_handler);
177 |
178 | dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatus_handler);
179 | }
180 | }
181 |
182 | /**
183 | * @private
184 | */
185 | protected function removeListeners(dispatcher : IEventDispatcher) : void
186 | {
187 | if(dispatcher)
188 | {
189 | dispatcher.removeEventListener(IOErrorEvent.IO_ERROR, error_handler);
190 | dispatcher.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, error_handler);
191 |
192 | dispatcher.removeEventListener(Event.OPEN, open_handler);
193 | dispatcher.removeEventListener(ProgressEvent.PROGRESS, progress_handler);
194 | dispatcher.removeEventListener(Event.COMPLETE, complete_handler);
195 |
196 | dispatcher.removeEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatus_handler);
197 | }
198 | }
199 |
200 | /**
201 | * @inheritDoc
202 | */
203 | override public function setParam(id : String, value : *) : void
204 | {
205 | var success : Boolean = true;
206 |
207 | switch(id)
208 | {
209 | case Param.BASE:
210 | success = setBase(value);
211 | break;
212 | case Param.PREVENT_CACHE:
213 | setPreventCache(value);
214 | break;
215 | case Param.HEADERS:
216 | _request.requestHeaders = value;
217 | break;
218 | }
219 |
220 | if(success)
221 | super.setParam(id, value);
222 | }
223 |
224 | /**
225 | * @private
226 | */
227 | protected function setBase(value : String) : Boolean
228 | {
229 | if(!value)
230 | return false;
231 |
232 | var urlParser : URLParser = new URLParser(_request.url);
233 |
234 | if(!urlParser.host)
235 | {
236 | _request.url = value + urlParser.url;
237 | return true;
238 | }
239 |
240 | return false;
241 | }
242 |
243 | /**
244 | * @private
245 | */
246 | protected function setPreventCache(value : Boolean) : void
247 | {
248 | var url : String = _request.url;
249 | if(value)
250 | {
251 | if(url.indexOf("ck=") == -1)
252 | url += ((url.indexOf("?") == -1) ? "?" : "&") + "ck=" + new Date().time;
253 | }
254 | else if(url.indexOf("ck=") != -1)
255 | {
256 | var vrs : URLVariables = new URLVariables(url.slice(url.indexOf("?") + 1));
257 | var cleanUrl : String = url.slice(0, url.indexOf("?"));
258 | var cleanVrs : URLVariables = new URLVariables();
259 |
260 | for(var queryKey : String in vrs)
261 | {
262 | if(queryKey != "ck")
263 | cleanVrs[queryKey] = vrs[queryKey];
264 | }
265 |
266 | var queryString : String = cleanVrs.toString();
267 |
268 | url = cleanUrl + ((queryString != "") ? "?" + queryString : "");
269 | }
270 | _request.url = url;
271 | }
272 | }
273 | }
274 |
--------------------------------------------------------------------------------
/src/org/assetloader/loaders/BinaryLoader.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.loaders
2 | {
3 | import org.assetloader.base.AssetType;
4 | import org.assetloader.signals.LoaderSignal;
5 |
6 | import flash.events.Event;
7 | import flash.events.IEventDispatcher;
8 | import flash.net.URLRequest;
9 | import flash.net.URLStream;
10 | import flash.utils.ByteArray;
11 |
12 | /**
13 | * @author Matan Uberstein
14 | */
15 | public class BinaryLoader extends BaseLoader
16 | {
17 | /**
18 | * @private
19 | */
20 | protected var _bytes : ByteArray;
21 |
22 | /**
23 | * @private
24 | */
25 | protected var _loader : URLStream;
26 |
27 | public function BinaryLoader(request : URLRequest, id : String = null)
28 | {
29 | super(request, AssetType.BINARY, id);
30 | }
31 |
32 | /**
33 | * @private
34 | */
35 | override protected function initSignals() : void
36 | {
37 | super.initSignals();
38 | _onComplete = new LoaderSignal(ByteArray);
39 | }
40 |
41 | /**
42 | * @private
43 | */
44 | override protected function constructLoader() : IEventDispatcher
45 | {
46 | _loader = new URLStream();
47 | return _loader;
48 | }
49 |
50 | /**
51 | * @private
52 | */
53 | override protected function invokeLoading() : void
54 | {
55 | _loader.load(request);
56 | }
57 |
58 | /**
59 | * @inheritDoc
60 | */
61 | override public function stop() : void
62 | {
63 | if(_invoked)
64 | {
65 | try
66 | {
67 | _loader.close();
68 | }
69 | catch(error : Error)
70 | {
71 | }
72 | }
73 |
74 | super.stop();
75 | }
76 |
77 | /**
78 | * @inheritDoc
79 | */
80 | override public function destroy() : void
81 | {
82 | super.destroy();
83 | _loader = null;
84 | _bytes = null;
85 | }
86 |
87 | /**
88 | * @private
89 | */
90 | override protected function complete_handler(event : Event) : void
91 | {
92 | _bytes = new ByteArray();
93 | _loader.readBytes(_bytes);
94 |
95 | _data = _bytes;
96 |
97 | super.complete_handler(event);
98 | }
99 |
100 | /**
101 | * Gets the resulting ByteArray after loading is complete.
102 | *
103 | * @return ByteArray
104 | */
105 | public function get bytes() : ByteArray
106 | {
107 | return _bytes;
108 | }
109 | }
110 | }
111 |
--------------------------------------------------------------------------------
/src/org/assetloader/loaders/CSSLoader.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.loaders
2 | {
3 | import org.assetloader.base.AssetType;
4 | import org.assetloader.signals.LoaderSignal;
5 |
6 | import flash.net.URLRequest;
7 | import flash.text.StyleSheet;
8 |
9 | /**
10 | * @author Matan Uberstein
11 | */
12 | public class CSSLoader extends TextLoader
13 | {
14 | /**
15 | * @private
16 | */
17 | protected var _styleSheet : StyleSheet;
18 |
19 | public function CSSLoader(request : URLRequest, id : String = null)
20 | {
21 | super(request, id);
22 | _type = AssetType.CSS;
23 | }
24 |
25 | /**
26 | * @private
27 | */
28 | override protected function initSignals() : void
29 | {
30 | super.initSignals();
31 | _onComplete = new LoaderSignal(StyleSheet);
32 | }
33 |
34 | /**
35 | * @inheritDoc
36 | */
37 | override public function destroy() : void
38 | {
39 | super.destroy();
40 | _styleSheet = null;
41 | }
42 |
43 | /**
44 | * @private
45 | *
46 | * @inheritDoc
47 | */
48 | override protected function testData(data : String) : String
49 | {
50 | var errMsg : String = "";
51 | try
52 | {
53 | _styleSheet = new StyleSheet();
54 | _styleSheet.parseCSS(data);
55 | _data = _styleSheet;
56 | }
57 | catch(err : Error)
58 | {
59 | errMsg = err.message;
60 | }
61 |
62 | return errMsg;
63 | }
64 |
65 | /**
66 | * Gets the resulting StyleSheet after loading is complete.
67 | *
68 | * @return StyleSheet
69 | */
70 | public function get styleSheet() : StyleSheet
71 | {
72 | return _styleSheet;
73 | }
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/src/org/assetloader/loaders/DisplayObjectLoader.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.loaders
2 | {
3 | import flash.display.LoaderInfo;
4 | import org.assetloader.base.AssetType;
5 | import org.assetloader.base.Param;
6 | import org.assetloader.signals.LoaderSignal;
7 |
8 | import flash.display.DisplayObject;
9 | import flash.display.Loader;
10 | import flash.display.LoaderInfo;
11 | import flash.events.ErrorEvent;
12 | import flash.events.Event;
13 | import flash.events.IEventDispatcher;
14 | import flash.net.URLRequest;
15 |
16 | /**
17 | * @author Matan Uberstein
18 | */
19 | public class DisplayObjectLoader extends BaseLoader
20 | {
21 | /**
22 | * @private
23 | */
24 | protected var _displayObject : DisplayObject;
25 |
26 | /**
27 | * @private
28 | */
29 | protected var _loader : Loader;
30 |
31 | public function DisplayObjectLoader(request : URLRequest, id : String = null)
32 | {
33 | super(request, AssetType.DISPLAY_OBJECT, id);
34 | }
35 |
36 | /**
37 | * @private
38 | */
39 | override protected function initSignals() : void
40 | {
41 | super.initSignals();
42 | _onComplete = new LoaderSignal(DisplayObject);
43 | }
44 |
45 | /**
46 | * @private
47 | */
48 | override protected function constructLoader() : IEventDispatcher
49 | {
50 | _loader = new Loader();
51 | return _loader.contentLoaderInfo;
52 | }
53 |
54 | /**
55 | * @private
56 | */
57 | override protected function invokeLoading() : void
58 | {
59 | _loader.load(request, getParam(Param.LOADER_CONTEXT));
60 | }
61 |
62 | /**
63 | * @inheritDoc
64 | */
65 | override public function stop() : void
66 | {
67 | if(_invoked)
68 | {
69 | try
70 | {
71 | _loader.close();
72 | }
73 | catch(error : Error)
74 | {
75 | }
76 | }
77 | super.stop();
78 | }
79 |
80 | /**
81 | * @inheritDoc
82 | */
83 | override public function destroy() : void
84 | {
85 | super.destroy();
86 | _loader = null;
87 | _displayObject = null;
88 | }
89 |
90 | /**
91 | * @private
92 | */
93 | override protected function complete_handler(event : Event) : void
94 | {
95 | _data = _displayObject = _loader.content;
96 |
97 | var testResult : String = testData(_data);
98 |
99 | if(testResult != "")
100 | {
101 | _onError.dispatch(this, ErrorEvent.ERROR, testResult);
102 | return;
103 | }
104 |
105 | super.complete_handler(event);
106 | }
107 |
108 | /**
109 | * @private
110 | *
111 | * @return Error message, empty String if no error occured.
112 | */
113 | protected function testData(data : DisplayObject) : String
114 | {
115 | return !data ? "Data is not a DisplayObject." : "";
116 | }
117 |
118 | /**
119 | * Gets the resulting DisplayObject after loading is complete.
120 | *
121 | * @return DisplayObject
122 | */
123 | public function get displayObject() : DisplayObject
124 | {
125 | return _displayObject;
126 | }
127 |
128 | /**
129 | * Gets the current content's LoaderInfo.
130 | *
131 | * @return LoaderInfo
132 | */
133 | public function get contentLoaderInfo() : LoaderInfo
134 | {
135 | return _loader ? _loader.contentLoaderInfo : null;
136 | }
137 | }
138 | }
139 |
--------------------------------------------------------------------------------
/src/org/assetloader/loaders/ImageLoader.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.loaders
2 | {
3 | import org.assetloader.base.AssetType;
4 | import org.assetloader.base.Param;
5 | import org.assetloader.signals.LoaderSignal;
6 |
7 | import flash.display.Bitmap;
8 | import flash.display.BitmapData;
9 | import flash.display.DisplayObject;
10 | import flash.net.URLRequest;
11 |
12 | /**
13 | * @author Matan Uberstein
14 | */
15 | public class ImageLoader extends DisplayObjectLoader
16 | {
17 | /**
18 | * @private
19 | */
20 | protected var _bitmapData : BitmapData;
21 | /**
22 | * @private
23 | */
24 | protected var _bitmap : Bitmap;
25 |
26 | public function ImageLoader(request : URLRequest, id : String = null)
27 | {
28 | super(request, id);
29 | _type = AssetType.IMAGE;
30 | }
31 |
32 | /**
33 | * @private
34 | */
35 | override protected function initSignals() : void
36 | {
37 | super.initSignals();
38 | _onComplete = new LoaderSignal(Bitmap);
39 | }
40 |
41 | /**
42 | * @inheritDoc
43 | */
44 | override public function destroy() : void
45 | {
46 | super.destroy();
47 | try
48 | {
49 | _bitmapData.dispose();
50 | }
51 | catch(error : Error)
52 | {
53 | }
54 | _bitmap = null;
55 | }
56 |
57 | /**
58 | * @private
59 | *
60 | * @inheritDoc
61 | */
62 | override protected function testData(data : DisplayObject) : String
63 | {
64 | var errMsg : String = "";
65 | try
66 | {
67 | var sourceBitmapData:BitmapData = Bitmap(data).bitmapData;
68 | var transparent:Boolean = (getParam(Param.TRANSPARENT) == undefined) ? sourceBitmapData.transparent : getParam(Param.TRANSPARENT);
69 | _bitmapData = new BitmapData(_loader.contentLoaderInfo.width, _loader.contentLoaderInfo.height, transparent, getParam(Param.FILL_COLOR) || 0x0);
70 | _bitmapData.draw(sourceBitmapData, getParam(Param.MATRIX), getParam(Param.COLOR_TRANSFROM), getParam(Param.BLEND_MODE), getParam(Param.CLIP_RECTANGLE), getParam(Param.SMOOTHING) || false);
71 |
72 | _data = _bitmap = new Bitmap(_bitmapData, getParam(Param.PIXEL_SNAPPING) || "auto", getParam(Param.SMOOTHING) || false);
73 | }
74 | catch(err : Error)
75 | {
76 | errMsg = err.message;
77 | }
78 |
79 | return errMsg;
80 | }
81 |
82 | /**
83 | * Gets the resulting BitmapData after loading is complete.
84 | *
85 | * @return BitmapData
86 | */
87 | public function get bitmapData() : BitmapData
88 | {
89 | return _bitmapData;
90 | }
91 |
92 | /**
93 | * Gets the resulting Bitmap after loading is complete.
94 | *
95 | * @return Bitmap
96 | */
97 | public function get bitmap() : Bitmap
98 | {
99 | return _bitmap;
100 | }
101 | }
102 | }
103 |
--------------------------------------------------------------------------------
/src/org/assetloader/loaders/JSONLoader.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.loaders
2 | {
3 | import com.adobe.serialization.json.JSON;
4 |
5 | import org.assetloader.base.AssetType;
6 | import org.assetloader.signals.LoaderSignal;
7 |
8 | import flash.net.URLRequest;
9 |
10 | /**
11 | * @author Matan Uberstein
12 | */
13 | public class JSONLoader extends TextLoader
14 | {
15 | /**
16 | * @private
17 | */
18 | protected var _jsonObject : Object;
19 |
20 | public function JSONLoader(request : URLRequest, id : String = null)
21 | {
22 | super(request, id);
23 | _type = AssetType.JSON;
24 | }
25 |
26 | /**
27 | * @private
28 | */
29 | override protected function initSignals() : void
30 | {
31 | super.initSignals();
32 | _onComplete = new LoaderSignal(Object);
33 | }
34 |
35 | /**
36 | * @private
37 | */
38 | override public function destroy() : void
39 | {
40 | super.destroy();
41 | _jsonObject = null;
42 | }
43 |
44 | /**
45 | * @private
46 | *
47 | * @inheritDoc
48 | */
49 | override protected function testData(data : String) : String
50 | {
51 | var errMsg : String = "";
52 | try
53 | {
54 | _data = _jsonObject = JSON.decode(data);
55 | }
56 | catch(err : Error)
57 | {
58 | errMsg = err.message;
59 | }
60 |
61 | return errMsg;
62 | }
63 |
64 | /**
65 | * Gets the resulting Json Object after loading and parsing is complete.
66 | *
67 | * @return Object
68 | */
69 | public function get jsonObject() : Object
70 | {
71 | return _jsonObject;
72 | }
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/src/org/assetloader/loaders/SWFLoader.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.loaders
2 | {
3 | import org.assetloader.base.AssetType;
4 | import org.assetloader.signals.LoaderSignal;
5 |
6 | import flash.display.DisplayObject;
7 | import flash.display.Sprite;
8 | import flash.events.Event;
9 | import flash.events.IEventDispatcher;
10 | import flash.net.URLRequest;
11 |
12 | /**
13 | * @author Matan Uberstein
14 | */
15 | public class SWFLoader extends DisplayObjectLoader
16 | {
17 | /**
18 | * @private
19 | */
20 | protected var _swf : Sprite;
21 |
22 | /**
23 | * @private
24 | */
25 | protected var _onInit : LoaderSignal;
26 |
27 | public function SWFLoader(request : URLRequest, id : String = null)
28 | {
29 | super(request, id);
30 | _type = AssetType.SWF;
31 | }
32 |
33 | /**
34 | * @private
35 | */
36 | override protected function initSignals() : void
37 | {
38 | super.initSignals();
39 | _onInit = new LoaderSignal();
40 | _onComplete = new LoaderSignal(Sprite);
41 | }
42 |
43 | protected function init_handler(event : Event) : void
44 | {
45 | _data = _displayObject = _loader.content;
46 |
47 | _onInit.dispatch(this, _data);
48 | }
49 |
50 | /**
51 | * @private
52 | */
53 | override protected function addListeners(dispatcher : IEventDispatcher) : void
54 | {
55 | super.addListeners(dispatcher);
56 | if(dispatcher)
57 | dispatcher.addEventListener(Event.INIT, init_handler);
58 | }
59 |
60 | /**
61 | * @private
62 | */
63 | override protected function removeListeners(dispatcher : IEventDispatcher) : void
64 | {
65 | super.removeListeners(dispatcher);
66 | if(dispatcher)
67 | dispatcher.removeEventListener(Event.INIT, init_handler);
68 | }
69 |
70 | /**
71 | * @inheritDoc
72 | */
73 | override public function destroy() : void
74 | {
75 | super.destroy();
76 | _swf = null;
77 | }
78 |
79 | /**
80 | * @private
81 | *
82 | * @inheritDoc
83 | */
84 | override protected function testData(data : DisplayObject) : String
85 | {
86 | var errMsg : String = "";
87 | try
88 | {
89 | _data = _swf = Sprite(data);
90 | }
91 | catch(error : Error)
92 | {
93 | errMsg = error.message;
94 | }
95 | return errMsg;
96 | }
97 |
98 | /**
99 | * Gets the resulting Sprite after loading is complete.
100 | *
101 | * @return Sprite
102 | */
103 | public function get swf() : Sprite
104 | {
105 | return _swf;
106 | }
107 |
108 | /**
109 | * Gets the resulting Sprite class after loading is complete.
110 | * Allows multiple instanciation of this SWF content.
111 | *
112 | * @return Class
113 | */
114 | public function get swfClass() : Class
115 | {
116 | var swfClassName:String = getQualifiedClassName(_swf);
117 | var swfClass:Class = getDefinitionByName(swfClassName) as Class;
118 | return swfClass;
119 | }
120 |
121 | /**
122 | * Dispatched when the properties and methods of a loaded SWF file are accessible and ready for use.
123 | *
124 | * HANDLER ARGUMENTS: (signal:LoaderSignal)
125 | *
126 | * - signal - The signal that dispatched.
127 | *
128 | *
129 | * @see org.assetloader.signals.LoaderSignal
130 | */
131 | public function get onInit() : LoaderSignal
132 | {
133 | return _onInit;
134 | }
135 | }
136 | }
137 |
--------------------------------------------------------------------------------
/src/org/assetloader/loaders/SoundLoader.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.loaders
2 | {
3 | import org.assetloader.base.AssetType;
4 | import org.assetloader.base.Param;
5 | import org.assetloader.signals.LoaderSignal;
6 |
7 | import flash.events.Event;
8 | import flash.events.IEventDispatcher;
9 | import flash.events.TimerEvent;
10 | import flash.media.Sound;
11 | import flash.net.URLRequest;
12 | import flash.utils.Timer;
13 |
14 | /**
15 | * @author Matan Uberstein
16 | */
17 | public class SoundLoader extends BaseLoader
18 | {
19 | /**
20 | * @private
21 | */
22 | protected var _onId3 : LoaderSignal;
23 |
24 | /**
25 | * @private
26 | */
27 | protected var _onReady : LoaderSignal;
28 |
29 | /**
30 | * @private
31 | */
32 | protected var _sound : Sound;
33 |
34 | /**
35 | * @private
36 | */
37 | protected var _readyTimer : Timer;
38 |
39 | /**
40 | * @private
41 | */
42 | protected var _isReady : Boolean;
43 |
44 | public function SoundLoader(request : URLRequest, id : String = null)
45 | {
46 | super(request, AssetType.SOUND, id);
47 | }
48 |
49 | /**
50 | * @private
51 | */
52 | override protected function initSignals() : void
53 | {
54 | super.initSignals();
55 | _onComplete = new LoaderSignal(Sound);
56 | _onReady = new LoaderSignal(Sound);
57 | _onId3 = new LoaderSignal();
58 | }
59 |
60 | /**
61 | * @private
62 | */
63 | override protected function constructLoader() : IEventDispatcher
64 | {
65 | _sound = _data = new Sound();
66 |
67 | if(!_readyTimer)
68 | {
69 | _readyTimer = new Timer(50);
70 | _readyTimer.addEventListener(TimerEvent.TIMER, readyTimer_handler);
71 | }
72 | else
73 | _readyTimer.reset();
74 |
75 | return _sound;
76 | }
77 |
78 | /**
79 | * @private
80 | */
81 | override protected function invokeLoading() : void
82 | {
83 | try
84 | {
85 | _sound.load(request, getParam(Param.SOUND_LOADER_CONTEXT));
86 | }
87 | catch(error : SecurityError)
88 | {
89 | _onError.dispatch(this, error.name, error.message);
90 | }
91 | _readyTimer.start();
92 | }
93 |
94 | /**
95 | * @inheritDoc
96 | */
97 | override public function stop() : void
98 | {
99 | if(_invoked)
100 | {
101 | try
102 | {
103 | _sound.close();
104 | }
105 | catch(error : Error)
106 | {
107 | }
108 | _readyTimer.stop();
109 | }
110 | super.stop();
111 | }
112 |
113 | /**
114 | * @inheritDoc
115 | */
116 | override public function destroy() : void
117 | {
118 | super.destroy();
119 |
120 | if(_readyTimer)
121 | _readyTimer.removeEventListener(TimerEvent.TIMER, readyTimer_handler);
122 |
123 | _sound = null;
124 | _readyTimer = null;
125 | _isReady = false;
126 | }
127 |
128 | /**
129 | * @private
130 | */
131 | override protected function addListeners(dispatcher : IEventDispatcher) : void
132 | {
133 | super.addListeners(dispatcher);
134 | if(dispatcher)
135 | dispatcher.addEventListener(Event.ID3, id3_handler);
136 | }
137 |
138 | /**
139 | * @private
140 | */
141 | override protected function removeListeners(dispatcher : IEventDispatcher) : void
142 | {
143 | super.removeListeners(dispatcher);
144 | if(dispatcher)
145 | dispatcher.removeEventListener(Event.ID3, id3_handler);
146 | }
147 |
148 | /**
149 | * @private
150 | */
151 | override protected function complete_handler(event : Event) : void
152 | {
153 | if(!_isReady)
154 | {
155 | _isReady = true;
156 | _onReady.dispatch(this, _sound);
157 | _readyTimer.stop();
158 | }
159 | super.complete_handler(event);
160 | }
161 |
162 | /**
163 | * @private
164 | */
165 | protected function readyTimer_handler(event : TimerEvent) : void
166 | {
167 | if(!_isReady && !_sound.isBuffering)
168 | {
169 | _onReady.dispatch(this, _sound);
170 | _isReady = true;
171 | _readyTimer.stop();
172 | }
173 | }
174 |
175 | /**
176 | * @private
177 | */
178 | protected function id3_handler(event : Event) : void
179 | {
180 | _onId3.dispatch(this);
181 | }
182 |
183 | /**
184 | * Dispatches when the Sound instance is ready to be played e.g. streamed while still loading.
185 | * The SoundLoader closely monitors the isBuffering property of the Sound instance, the first
186 | * time isBuffering is false, onReady will dispatch. It could happen that the sound file is finished
187 | * loading loading before the isBuffering monitor detected it, so another check occurs onComplete.
188 | * Thus onReady will always fire before onComplete, but only once.
189 | *
190 | * HANDLER ARGUMENTS: (signal:LoaderSignal, sound:Sound)
191 | *
192 | * - signal - The signal that dispatched.
193 | * - sound - The Sound instance.
194 | *
195 | *
196 | * @see org.assetloader.signals.LoaderSignal
197 | */
198 | public function get onReady() : LoaderSignal
199 | {
200 | return _onReady;
201 | }
202 |
203 | /**
204 | * Dispatches when the SoundLoader has loaded the ID3 information of
205 | * the sound clip.
206 | * Note: Not all sound files have ID3 properties, thus this Signal will
207 | * only dispatch if such data exists.
208 | *
209 | * HANDLER ARGUMENTS: (signal:LoaderSignal)
210 | *
211 | * - signal - The signal that dispatched.
212 | *
213 | *
214 | * @see org.assetloader.signals.LoaderSignal
215 | */
216 | public function get onId3() : LoaderSignal
217 | {
218 | return _onId3;
219 | }
220 |
221 | /**
222 | * Gets the Sound instance.
223 | * Note: this instance will be available as soon as the SoundLoader's
224 | * start method is invoked.
225 | *
226 | * @return Sound
227 | */
228 | public function get sound() : Sound
229 | {
230 | return _sound;
231 | }
232 |
233 | /**
234 | * Gets whether the Sound instance is ready to be streamed or not.
235 | *
236 | * @see #onReady
237 | */
238 | public function get isReady() : Boolean
239 | {
240 | return _isReady;
241 | }
242 | }
243 | }
244 |
--------------------------------------------------------------------------------
/src/org/assetloader/loaders/TextLoader.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.loaders
2 | {
3 | import org.assetloader.base.AssetType;
4 | import org.assetloader.signals.LoaderSignal;
5 |
6 | import flash.events.ErrorEvent;
7 | import flash.events.Event;
8 | import flash.events.IEventDispatcher;
9 | import flash.net.URLRequest;
10 | import flash.net.URLStream;
11 | import flash.utils.ByteArray;
12 |
13 | /**
14 | * @author Matan Uberstein
15 | */
16 | public class TextLoader extends BaseLoader
17 | {
18 | /**
19 | * @private
20 | */
21 | protected var _text : String;
22 |
23 | /**
24 | * @private
25 | */
26 | protected var _loader : URLStream;
27 |
28 | public function TextLoader(request : URLRequest, id : String = null)
29 | {
30 | super(request, AssetType.TEXT, id);
31 | }
32 |
33 | /**
34 | * @private
35 | */
36 | override protected function initSignals() : void
37 | {
38 | super.initSignals();
39 | _onComplete = new LoaderSignal(String);
40 | }
41 |
42 | /**
43 | * @private
44 | */
45 | override protected function constructLoader() : IEventDispatcher
46 | {
47 | _loader = new URLStream();
48 | return _loader;
49 | }
50 |
51 | /**
52 | * @private
53 | */
54 | override protected function invokeLoading() : void
55 | {
56 | _loader.load(request);
57 | }
58 |
59 | /**
60 | * @inheritDoc
61 | */
62 | override public function stop() : void
63 | {
64 | if(_invoked)
65 | {
66 | try
67 | {
68 | _loader.close();
69 | }
70 | catch(error : Error)
71 | {
72 | }
73 | }
74 | super.stop();
75 | }
76 |
77 | /**
78 | * @inheritDoc
79 | */
80 | override public function destroy() : void
81 | {
82 | super.destroy();
83 | _loader = null;
84 | _text = null;
85 | }
86 |
87 | /**
88 | * @private
89 | */
90 | override protected function complete_handler(event : Event) : void
91 | {
92 | var bytes : ByteArray = new ByteArray();
93 | _loader.readBytes(bytes);
94 |
95 | _data = _text = bytes.toString();
96 |
97 | var testResult : String = testData(_data);
98 |
99 | if(testResult != "")
100 | {
101 | _onError.dispatch(this, ErrorEvent.ERROR, testResult);
102 | return;
103 | }
104 |
105 | super.complete_handler(event);
106 | }
107 |
108 | /**
109 | * @private
110 | *
111 | * @return Error message, empty string if no error occured.
112 | */
113 | protected function testData(data : String) : String
114 | {
115 | return data == null ? "Data loaded is null." : "";
116 | }
117 |
118 | /**
119 | * Gets the resulting String after loading is complete.
120 | *
121 | * @return String
122 | */
123 | public function get text() : String
124 | {
125 | return _text;
126 | }
127 | }
128 | }
129 |
--------------------------------------------------------------------------------
/src/org/assetloader/loaders/XMLLoader.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.loaders
2 | {
3 |
4 | import org.assetloader.base.AssetType;
5 | import org.assetloader.signals.LoaderSignal;
6 |
7 | import flash.net.URLRequest;
8 |
9 | /**
10 | * @author Matan Uberstein
11 | */
12 | public class XMLLoader extends TextLoader
13 | {
14 | /**
15 | * @private
16 | */
17 | protected var _xml : XML;
18 |
19 | public function XMLLoader(request : URLRequest, id : String = null)
20 | {
21 | super(request, id);
22 | _type = AssetType.XML;
23 | }
24 |
25 | /**
26 | * @private
27 | */
28 | override protected function initSignals() : void
29 | {
30 | super.initSignals();
31 | _onComplete = new LoaderSignal(XML);
32 | }
33 |
34 | /**
35 | * @private
36 | */
37 | override public function destroy() : void
38 | {
39 | super.destroy();
40 | _xml = null;
41 | }
42 |
43 | /**
44 | * @private
45 | *
46 | * @inheritDoc
47 | */
48 | override protected function testData(data : String) : String
49 | {
50 | try
51 | {
52 | _data = _xml = new XML(data);
53 | }
54 | catch(err : Error)
55 | {
56 | return err.message;
57 | }
58 |
59 | if(xml)
60 | if(xml.nodeKind() != "element")
61 | return "Not valid XML.";
62 |
63 | return "";
64 | }
65 |
66 | /**
67 | * Gets the resulting XML after loading and parsing is complete.
68 | *
69 | * @return XML
70 | */
71 | public function get xml() : XML
72 | {
73 | return _xml;
74 | }
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/src/org/assetloader/parsers/URLParser.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.parsers
2 | {
3 | import flash.net.URLVariables;
4 |
5 | /**
6 | * The URLParser is used to check whether URLs are valid or not, also it extracts useful information from the given url.
7 | *
8 | * URLs are parsed according to three groups; Absolute, Relative and Server.
9 | *
10 | * - Absolute
11 | *
12 | * - Recognized by having a protocol. E.g. starts with "http://"
* - Looks for a file extension. E.g. somefile.jpg
13 | *
14 | * - Relative
15 | *
16 | * - Recognized by NOT having a protocol. E.g. doesn't start with "http://"
17 | * - Looks for a file extension. E.g. somefile.jpg
18 | *
19 | * - Server
20 | *
21 | * - Recognized by NOT having a file extension.
22 | * - Can be Absolute or Relative.
* - If Absolute no trailing slash required. E.g. http://www.matan.co.za/getGalleryXML
* - If Relative trailing slash IS required. E.g. getGalleryXML/
* - Note: if relative with multiple pathings the trailing slash isn't required. E.g. scripts/getGalleryXML
23 | *
24 | *
25 | *
26 | * @author Matan Uberstein
27 | */
28 | public class URLParser
29 | {
30 | /**
31 | * @private
32 | */
33 | protected var _url : String;
34 | /**
35 | * @private
36 | */
37 | protected var _protocol : String;
38 | /**
39 | * @private
40 | */
41 | protected var _login : String;
42 | /**
43 | * @private
44 | */
45 | protected var _password : String;
46 | /**
47 | * @private
48 | */
49 | protected var _port : int;
50 | /**
51 | * @private
52 | */
53 | protected var _host : String;
54 | /**
55 | * @private
56 | */
57 | protected var _path : String;
58 | /**
59 | * @private
60 | */
61 | protected var _fileName : String;
62 | /**
63 | * @private
64 | */
65 | protected var _fileExtension : String;
66 | /**
67 | * @private
68 | */
69 | protected var _urlVariables : URLVariables;
70 | /**
71 | * @private
72 | */
73 | protected var _anchor : String;
74 | /**
75 | * @private
76 | */
77 | protected var _isValid : Boolean = true;
78 |
79 | /**
80 | * Parses url and breaks is down into properties and check whether the url is valid.
81 | * @param url String
82 | */
83 | public function URLParser(url : String)
84 | {
85 | _url = url;
86 |
87 | if(!_url || _url == "")
88 | {
89 | _isValid = false;
90 | return;
91 | }
92 |
93 | if(_url.length >= 250)
94 | {
95 | _isValid = false;
96 | return;
97 | }
98 |
99 | var urlExp : RegExp = /^(?:(?P\w+):\/\/)?(?:(?P\w+):(?P\w+)@)?(?P(?:(?P[\w\.]+)\.)?(?P\w+\.(?P\w+)))?(?::(?P\d+))?(?P[\w\W]*\/(?P[^?]+(?:\.\w+)?)?)?(?:\?(?P[\w=&]+))?(?:#(?P\w+))?/;
100 | var match : * = urlExp.exec(url);
101 |
102 | if(match)
103 | {
104 | _protocol = match.scheme || null;
105 |
106 | _host = match.host || null;
107 |
108 | _login = match.login || null;
109 | _password = match.pass || null;
110 |
111 | _port = match.port ? int(match.port) : 80;
112 |
113 | _path = match.path || null;
114 |
115 | if(match.arg && match.arg != "")
116 | _urlVariables = new URLVariables(match.arg);
117 |
118 | _anchor = match.anchor || null;
119 |
120 | if(!_protocol && _url.indexOf("/") == -1)
121 | {
122 | _path = _host || _url;
123 | _fileName = _path.slice(-_path.lastIndexOf("/") - 1);
124 | _host = null;
125 | }
126 |
127 | if(!_path || _path == "")
128 | {
129 | _isValid = false;
130 | return;
131 | }
132 |
133 | if(_path.charAt(0) != "/")
134 | _path = "/" + _path;
135 |
136 | if(!_fileName)
137 | _fileName = match.file || null;
138 |
139 | if(_fileName)
140 | if(_fileName.indexOf(".") != -1)
141 | _fileExtension = _fileName.slice(_fileName.lastIndexOf(".") + 1);
142 |
143 | if(!_fileExtension && !_protocol && _path.charAt(_path.length - 1) != "/")
144 | _isValid = false;
145 | }
146 | else
147 | _isValid = false;
148 | }
149 |
150 | /**
151 | * Gets the url passes through constructor.
152 | *
153 | * @return String
154 | */
155 | public function get url() : String
156 | {
157 | return _url;
158 | }
159 |
160 | /**
161 | * Gets the protocol of the url.
162 | * @return String
163 | */
164 | public function get protocol() : String
165 | {
166 | return _protocol;
167 | }
168 |
169 | /**
170 | * Gets the login/username from the url. E.g. ftp://Matan:Password@some.where.com will return Matan.
171 | * @return String
172 | */
173 | public function get login() : String
174 | {
175 | return _login;
176 | }
177 |
178 | /**
179 | * Gets the password from the url. E.g. ftp://Matan:Password@some.where.com will return Password.
180 | * @return String
181 | */
182 | public function get password() : String
183 | {
184 | return _password;
185 | }
186 |
187 | /**
188 | * Gets the port of the url.
189 | * @default 80
190 | * @return int
191 | */
192 | public function get port() : int
193 | {
194 | return _port;
195 | }
196 |
197 | /**
198 | * Gets the host of the url. E.g. www.matanuberstein.co.za
199 | * @return String
200 | */
201 | public function get host() : String
202 | {
203 | return _host;
204 | }
205 |
206 | /**
207 | * Gets the path of the url. E.g. some/path/to/file/
208 | * @return String
209 | */
210 | public function get path() : String
211 | {
212 | return _path;
213 | }
214 |
215 | /**
216 | * Gets the file name of the url. E.g. someFileName.ext
217 | * @return String
218 | */
219 | public function get fileName() : String
220 | {
221 | return _fileName;
222 | }
223 |
224 | /**
225 | * Gets the file extension of the url. E.g. txt, php, etc.
226 | * @return String
227 | */
228 | public function get fileExtension() : String
229 | {
230 | return _fileExtension;
231 | }
232 |
233 | /**
234 | * Gets the url variables from the url.
235 | * @return URLVariables
236 | */
237 | public function get urlVariables() : URLVariables
238 | {
239 | return _urlVariables;
240 | }
241 |
242 | /**
243 | * Gets the file hash anchor of the url. E.g. www.matanuberstein.co.za/#hello will return hello.
244 | * @return String
245 | */
246 | public function get anchor() : String
247 | {
248 | return _anchor;
249 | }
250 |
251 | /**
252 | * Gets whether the url is valid or not. E.g. if a empty path is passed isValid will be false.
253 | * @default true
254 | * @return Boolean
255 | */
256 | public function get isValid() : Boolean
257 | {
258 | return _isValid;
259 | }
260 | }
261 | }
262 |
--------------------------------------------------------------------------------
/src/org/assetloader/parsers/XmlConfigParser.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.parsers
2 | {
3 | import org.assetloader.base.AssetType;
4 | import org.assetloader.base.LoaderFactory;
5 | import org.assetloader.base.Param;
6 | import org.assetloader.core.IAssetLoader;
7 | import org.assetloader.core.IConfigParser;
8 | import org.assetloader.core.ILoader;
9 |
10 | import flash.net.URLRequest;
11 |
12 | /**
13 | * @author Matan Uberstein
14 | */
15 | public class XmlConfigParser implements IConfigParser
16 | {
17 | /**
18 | * @private
19 | */
20 | protected var _assetloader : IAssetLoader;
21 | /**
22 | * @private
23 | */
24 | protected var _loaderFactory : LoaderFactory;
25 |
26 | public function XmlConfigParser()
27 | {
28 | }
29 |
30 | /**
31 | * @inheritDoc
32 | */
33 | public function isValid(data : String) : Boolean
34 | {
35 | var xml : XML;
36 |
37 | try
38 | {
39 | xml = new XML(data);
40 | }
41 | catch(error : Error)
42 | {
43 | return false;
44 | }
45 |
46 | if(xml.nodeKind() != "element")
47 | return false;
48 |
49 | return true;
50 | }
51 |
52 | /**
53 | * @inheritDoc
54 | */
55 | public function parse(assetloader : IAssetLoader, data : String) : void
56 | {
57 | _assetloader = assetloader;
58 | _loaderFactory = new LoaderFactory();
59 |
60 | parseXml(new XML(data));
61 |
62 | _assetloader = null;
63 | _loaderFactory = null;
64 | }
65 |
66 | /**
67 | * @private
68 | */
69 | protected function parseXml(xml : XML, inheritFrom : ConfigVO = null) : void
70 | {
71 | var rootVo : ConfigVO = parseVo(xml, inheritFrom);
72 | var children : XMLList = xml.children();
73 |
74 | var cL : int = children.length();
75 | for(var i : int = 0;i < cL;i++)
76 | {
77 | var vo : ConfigVO = parseVo(children[i], rootVo);
78 |
79 | if(vo.id != "" && vo.src == "")
80 | {
81 | var group : IAssetLoader = parseGroup(vo);
82 | _assetloader.addLoader(group);
83 | group.addConfig(vo.xml);
84 | }
85 | else if(vo.id != "" && vo.src != "")
86 | _assetloader.addLoader(parseAsset(vo));
87 | else
88 | parseXml(children[i], vo);
89 | }
90 | }
91 |
92 | /**
93 | * @private
94 | */
95 | protected function parseGroup(vo : ConfigVO) : IAssetLoader
96 | {
97 | var loader : IAssetLoader = IAssetLoader(_loaderFactory.produce(vo.id, AssetType.GROUP, null, getParams(vo)));
98 | loader.numConnections = vo.connections;
99 | return loader;
100 | }
101 |
102 | /**
103 | * @private
104 | */
105 | protected function parseAsset(vo : ConfigVO) : ILoader
106 | {
107 | return _loaderFactory.produce(vo.id, vo.type, new URLRequest(vo.src), getParams(vo));
108 | }
109 |
110 | /**
111 | * @private
112 | */
113 | protected function parseVo(xml : XML, inheritFrom : ConfigVO = null) : ConfigVO
114 | {
115 | if(!inheritFrom)
116 | inheritFrom = new ConfigVO();
117 |
118 | var child : ConfigVO = new ConfigVO();
119 |
120 | child.src = xml.@src || "";
121 | child.id = xml.@id || "";
122 |
123 | child.base = xml.@base || inheritFrom.base;
124 | child.type = xml.@type || inheritFrom.type;
125 | child.weight = convertWeight(xml.@weight);
126 | child.connections = xml.@connections || inheritFrom.connections;
127 | child.retries = xml.@retries || inheritFrom.retries;
128 | child.priority = xml.@priority || NaN;
129 | child.onDemand = toBoolean(xml.@onDemand, inheritFrom.onDemand);
130 | child.preventCache = toBoolean(xml.@preventCache, inheritFrom.preventCache);
131 | child.userData = xml.@userData || null;
132 |
133 | child.transparent = toBoolean(xml.@transparent, inheritFrom.transparent);
134 | child.smoothing = toBoolean(xml.@smoothing, inheritFrom.smoothing);
135 | child.fillColor = (xml.@fillColor) ? Number(xml.@fillColor) : inheritFrom.fillColor;
136 | child.blendMode = xml.@blendMode || inheritFrom.blendMode;
137 | child.pixelSnapping = xml.@pixelSnapping || inheritFrom.pixelSnapping;
138 |
139 | child.type = child.type.toUpperCase();
140 |
141 | child.xml = xml;
142 |
143 | return child;
144 | }
145 |
146 | // --------------------------------------------------------------------------------------------------------------------------------//
147 | // HELPER FUNCTIONS
148 | // --------------------------------------------------------------------------------------------------------------------------------//
149 | /**
150 | * @private
151 | */
152 | protected function getParams(vo : ConfigVO) : Array
153 | {
154 | var params : Array = [];
155 |
156 | if(!isNaN(vo.priority))
157 | params.push(new Param(Param.PRIORITY, vo.priority));
158 |
159 | if(vo.base && vo.base != "")
160 | params.push(new Param(Param.BASE, vo.base));
161 |
162 | params.push(new Param(Param.WEIGHT, vo.weight));
163 | params.push(new Param(Param.RETRIES, vo.retries));
164 | params.push(new Param(Param.ON_DEMAND, vo.onDemand));
165 | params.push(new Param(Param.PREVENT_CACHE, vo.preventCache));
166 | params.push(new Param(Param.USER_DATA, vo.userData));
167 |
168 | params.push(new Param(Param.TRANSPARENT, vo.transparent));
169 | params.push(new Param(Param.SMOOTHING, vo.smoothing));
170 | params.push(new Param(Param.FILL_COLOR, vo.fillColor));
171 | params.push(new Param(Param.BLEND_MODE, vo.blendMode));
172 | params.push(new Param(Param.PIXEL_SNAPPING, vo.pixelSnapping));
173 |
174 | return params;
175 | }
176 |
177 | /**
178 | * @private
179 | */
180 | protected function convertWeight(str : String) : uint
181 | {
182 | if(!str)
183 | return 0;
184 |
185 | str = str.replace(new RegExp(" ", "g"), "");
186 |
187 | var mbExp : RegExp = new RegExp("mb", "gi");
188 | if(mbExp.test(str))
189 | return Number(str.replace(mbExp, "")) * 1024 * 1024;
190 |
191 | var kbExp : RegExp = new RegExp("kb", "gi");
192 | if(kbExp.test(str))
193 | return Number(str.replace(kbExp, "")) * 1024;
194 |
195 | return Number(str);
196 | }
197 |
198 | /**
199 | * @private
200 | */
201 | protected function toBoolean(value : String, defaultReturn : Boolean) : Boolean
202 | {
203 | value = value.toLowerCase();
204 |
205 | if(value == "1" || value == "yes" || value == "true")
206 | return true;
207 |
208 | if(value == "0" || value == "no" || value == "false")
209 | return false;
210 |
211 | return defaultReturn;
212 | }
213 | }
214 | }
215 |
216 | class ConfigVO
217 | {
218 | // Internal
219 | public var xml : XML;
220 |
221 | // IAssetLoader
222 | public var connections : int = 3;
223 |
224 | // Mixed, but mostly for ILoaders
225 | public var base : String = null;
226 | public var id : String;
227 | public var src : String;
228 | public var type : String = "AUTO";
229 | public var retries : int = 3;
230 | public var weight : uint = 0;
231 | public var priority : int = NaN;
232 | public var onDemand : Boolean = false;
233 | public var preventCache : Boolean = false;
234 | public var userData : String;
235 |
236 | // ImageLoader
237 |
238 | public var transparent : Boolean = true;
239 | public var fillColor : uint = 4.294967295E9;
240 | public var blendMode : String = null;
241 | public var smoothing : Boolean = false;
242 | public var pixelSnapping : String = "auto";
243 | }
--------------------------------------------------------------------------------
/src/org/assetloader/signals/ErrorSignal.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.signals
2 | {
3 |
4 | /**
5 | * @author Matan Uberstein
6 | */
7 | public class ErrorSignal extends LoaderSignal
8 | {
9 | /**
10 | * @private
11 | */
12 | protected var _type : String;
13 | /**
14 | * @private
15 | */
16 | protected var _message : String;
17 |
18 | public function ErrorSignal(...valueClasses)
19 | {
20 | _signalType = ErrorSignal;
21 | super(valueClasses);
22 | }
23 |
24 | /**
25 | * Dispatches Signal.
26 | *
27 | * @param args1 ILoader - ILoader to which the signal belongs.
28 | * @param args2 String - Error type
29 | * @param args3 String - Error message
30 | */
31 | override public function dispatch(...args) : void
32 | {
33 | _type = args[1];
34 | _message = args[2];
35 |
36 | args.splice(1, 2);
37 |
38 | super.dispatch.apply(null, args);
39 | }
40 |
41 | /**
42 | * Gets the error type.
43 | *
44 | * @return String
45 | */
46 | public function get type() : String
47 | {
48 | return _type;
49 | }
50 |
51 | /**
52 | * Gets the error message.
53 | *
54 | * @return String
55 | */
56 | public function get message() : String
57 | {
58 | return _message;
59 | }
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/src/org/assetloader/signals/HttpStatusSignal.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.signals
2 | {
3 |
4 | /**
5 | * @author Matan Uberstein
6 | */
7 | public class HttpStatusSignal extends LoaderSignal
8 | {
9 | /**
10 | * @private
11 | */
12 | protected var _status : int;
13 |
14 | public function HttpStatusSignal(...valueClasses)
15 | {
16 | _signalType = HttpStatusSignal;
17 | super(valueClasses);
18 | }
19 |
20 | /**
21 | * Dispatches Signal.
22 | *
23 | * @param args1 ILoader - ILoader to which the signal belongs.
24 | * @param args2 int - Status code
25 | */
26 | override public function dispatch(...args) : void
27 | {
28 | _status = args.splice(1, 1)[0];
29 | super.dispatch.apply(null, args);
30 | }
31 |
32 | /**
33 | * Gets the http status code.
34 | *
35 | * @return int
36 | */
37 | public function get status() : int
38 | {
39 | return _status;
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/src/org/assetloader/signals/LoaderSignal.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.signals
2 | {
3 | import org.assetloader.core.ILoader;
4 | import org.osflash.signals.Signal;
5 |
6 | /**
7 | * @author Matan Uberstein
8 | */
9 | public class LoaderSignal extends Signal
10 | {
11 | /**
12 | * @private
13 | */
14 | protected var _loader : ILoader;
15 |
16 | /**
17 | * @private
18 | */
19 | protected var _signalType : Class;
20 |
21 | public function LoaderSignal(...valueClasses)
22 | {
23 | super();
24 | _signalType ||= LoaderSignal;
25 |
26 | if(valueClasses.length == 1 && valueClasses[0] is Array)
27 | valueClasses = valueClasses[0];
28 |
29 | this.valueClasses = [_signalType].concat.apply(null, valueClasses);
30 | }
31 |
32 | /**
33 | * First argument must be the loader to which this signal belongs.
34 | */
35 | override public function dispatch(...args) : void
36 | {
37 | _loader = args.shift();
38 |
39 | super.dispatch.apply(null, [this].concat.apply(null, args));
40 | }
41 |
42 | /**
43 | * Gets the loader that dispatched this signal.
44 | *
45 | * @return ILoader
46 | */
47 | public function get loader() : ILoader
48 | {
49 | return _loader;
50 | }
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/src/org/assetloader/signals/NetStatusSignal.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.signals
2 | {
3 |
4 | /**
5 | * @author Matan Uberstein
6 | */
7 | public class NetStatusSignal extends LoaderSignal
8 | {
9 | /**
10 | * @private
11 | */
12 | protected var _info : Object;
13 |
14 | public function NetStatusSignal(...valueClasses)
15 | {
16 | _signalType = NetStatusSignal;
17 | super(valueClasses);
18 | }
19 |
20 | /**
21 | * Dispatches Signal.
22 | *
23 | * @param args1 ILoader - ILoader to which the signal belongs.
24 | * @param args2 Object - NetStatus Info Object
25 | */
26 | override public function dispatch(...args) : void
27 | {
28 | _info = args.splice(1, 1)[0];
29 | super.dispatch.apply(null, args);
30 | }
31 |
32 | /**
33 | * Gets the NetStatus info object.
34 | *
35 | * @return Object
36 | */
37 | public function get info() : Object
38 | {
39 | return _info;
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/src/org/assetloader/signals/ProgressSignal.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.signals
2 | {
3 |
4 | /**
5 | * @author Matan Uberstein
6 | */
7 | public class ProgressSignal extends LoaderSignal
8 | {
9 | /**
10 | * @private
11 | */
12 | protected var _latency : Number = 0;
13 | /**
14 | * @private
15 | */
16 | protected var _speed : Number = 0;
17 | /**
18 | * @private
19 | */
20 | protected var _averageSpeed : Number = 0;
21 | /**
22 | * @private
23 | */
24 | protected var _progress : Number = 0;
25 |
26 | /**
27 | * @private
28 | */
29 | protected var _bytesLoaded : uint = 0;
30 | /**
31 | * @private
32 | */
33 | protected var _bytesTotal : uint = 0;
34 |
35 | public function ProgressSignal(...valueClasses)
36 | {
37 | _signalType = ProgressSignal;
38 | super(valueClasses);
39 | }
40 |
41 | /**
42 | * Dispatches Signal.
43 | *
44 | * @param args1 ILoader - ILoader to which the signal belongs.
45 | * @param args2 Number - Latency
* @param args3 Number - Speed
* @param args4 Number - averageSpeed
* @param args5 Number - progress
* @param args6 uint - bytesLoaded
* @param args7 uint - bytesTotal
46 | */
47 | override public function dispatch(...args) : void
48 | {
49 | _latency = args[1];
50 | _speed = args[2];
51 | _averageSpeed = args[3];
52 | _progress = args[4];
53 | _bytesLoaded = args[5];
54 | _bytesTotal = args[6];
55 |
56 | args.splice(1, 6);
57 |
58 | super.dispatch.apply(null, args);
59 | }
60 |
61 | /**
62 | * Gets the latency in milliseconds.
63 | *
64 | * @return Number.
65 | */
66 | public function get latency() : Number
67 | {
68 | return _latency;
69 | }
70 |
71 | /**
72 | * Gets speed in kilobytes per second.
73 | *
74 | * @return Number.
75 | */
76 | public function get speed() : Number
77 | {
78 | return _speed;
79 | }
80 |
81 | /**
82 | * Gets the average speed in kilobytes per second.
83 | */
84 | public function get averageSpeed() : Number
85 | {
86 | return _averageSpeed;
87 | }
88 |
89 | /**
90 | * Gets the progress in percentage value.
91 | *
92 | * @return Number between 0 and 100
93 | */
94 | public function get progress() : Number
95 | {
96 | return _progress;
97 | }
98 |
99 | /**
100 | * Gets the bytes loaded.
101 | *
102 | * @return uint
103 | */
104 | public function get bytesLoaded() : uint
105 | {
106 | return _bytesLoaded;
107 | }
108 |
109 | /**
110 | * Gets the total bytes.
111 | *
112 | * @return uint
113 | */
114 | public function get bytesTotal() : uint
115 | {
116 | return _bytesTotal;
117 | }
118 | }
119 | }
120 |
--------------------------------------------------------------------------------
/src/org/assetloader/utils/Inspector.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.utils
2 | {
3 | import flash.media.Sound;
4 | import flash.display.Bitmap;
5 | import flash.display.BitmapData;
6 | import flash.display.DisplayObject;
7 | import flash.display.MovieClip;
8 | import flash.display.Sprite;
9 | import flash.system.ApplicationDomain;
10 | import flash.text.Font;
11 |
12 | /**
13 | * The Incpector class allows you to easily extract assets from a display object's application domain. E.g.
14 | * you've just loaded in a swf that contains serveral assets/classes you'd like to use in your application.
15 | * By constructing an Inspector instance and passing you loaded swf, you are able to "extact" those assets
16 | * just by calling the related api while passing the package/class name.
17 | *
18 | * @author Matan Uberstein + Karl Freeman
19 | */
20 | public class Inspector
21 | {
22 | /**
23 | * @private
24 | * Domain used so that we can check to see if a class exhists
25 | */
26 | protected var _domain : ApplicationDomain;
27 |
28 | /**
29 | * Public property of the base package used for all future "get" calls.
30 | * e.g. Setting the basePackage to "com.domain.assets" and then calling
31 | * "getSprite('MyCustomSpriteAsset');" will result in the Inspector returing
32 | * a new Sprite instance of "com.domain.assets.MyCustomSpriteAsset".
33 | */
34 | public var basePackage : String = "";
35 |
36 | /**
37 | * Constructor.
38 | *
39 | * @param displayObject The application domain to be inspected.
40 | *
41 | * @see #destroy()
42 | */
43 | public function Inspector(displayObject : DisplayObject)
44 | {
45 | _domain = displayObject.loaderInfo.applicationDomain;
46 | }
47 |
48 | /**
49 | * This will get rid of any reference held to the DisplayObject passed via constructor.
50 | */
51 | public function destroy() : void
52 | {
53 | _domain = null;
54 | }
55 |
56 | /**
57 | * Extract a Class object from the DisplayObject's application domain.
58 | *
59 | * Note: If you have specified a basePackage and you pass a "full name" of the class you'd like,
60 | * the basePackge is STILL appended to the "full name". This is done for performance reasons, there is no need to
61 | * do complex String handling. In a case like that, simply set the "overrideBasePackage" to an empty string.
62 | *
63 | *
64 | * inspector.basePackage = "org.assetloader.assets";
65 | * inspector.getClass("MyAsset1"); // Returns the class for "org.assetloader.assets.MyAsset1"
66 | * inspector.getClass("com.domain.assets.MyAsset2", ""); // Returns the class for "com.domain.assets.MyAsset2"
67 | * inspector.getClass("com.domain.assets.MyAsset2"); // Returns the class for "org.assetloader.assets.com.domain.assets.MyAsset2" - which is null
68 | *
69 | *
70 | * @param classNameOrFullName A straight up class name or full name of a class.
71 | * @param overrideBasePackage Override the basePackage, just for this call.
72 | *
73 | * @return Class object matching package/name combo.
74 | */
75 | public function getClass(classNameOrFullName : String, overrideBasePackage : String = null) : Class
76 | {
77 | var bp : String = overrideBasePackage || basePackage;
78 | if(!bp) bp = "";
79 | var fullName : String = bp + ((bp == "") ? "" : ".") + classNameOrFullName;
80 | if(_domain.hasDefinition(fullName))
81 | return _domain.getDefinition(fullName) as Class;
82 | return null;
83 |
84 | }
85 |
86 | /**
87 | * Extract a new instance of package/class combo from the DisplayObject's application domain.
88 | *
89 | * @param classNameOrFullName A straight up class name or full name of a class.
90 | * @param overrideBasePackage Override the basePackage, just for this call.
91 | * @see #getClass()
92 | */
93 | public function getSprite(className : String, overrideBasePackage : String = null) : Sprite
94 | {
95 | var clazz : Class = getClass(className, overrideBasePackage);
96 | if(clazz)
97 | return new clazz() as Sprite;
98 | return null;
99 | }
100 |
101 | /**
102 | * Extract a new instance of package/class combo from the DisplayObject's application domain.
103 | *
104 | * @param classNameOrFullName A straight up class name or full name of a class.
105 | * @param overrideBasePackage Override the basePackage, just for this call.
106 | * @see #getClass()
107 | */
108 | public function getMovieClip(className : String, overrideBasePackage : String = null) : MovieClip
109 | {
110 | var clazz : Class = getClass(className, overrideBasePackage);
111 | if(clazz)
112 | return new clazz() as MovieClip;
113 | return null;
114 | }
115 |
116 | /**
117 | * Extract a new instance of package/class combo from the DisplayObject's application domain.
118 | *
119 | * @param classNameOrFullName A straight up class name or full name of a class.
120 | * @param overrideBasePackage Override the basePackage, just for this call.
121 | * @see #getClass()
122 | */
123 | public function getFont(className : String, overrideBasePackage : String = null) : Font
124 | {
125 | var clazz : Class = getClass(className, overrideBasePackage);
126 | if(clazz)
127 | return new clazz() as Font;
128 | return null;
129 | }
130 |
131 | /**
132 | * Extract a new instance of package/class combo from the DisplayObject's application domain.
133 | *
134 | * @param classNameOrFullName A straight up class name or full name of a class.
135 | * @param overrideBasePackage Override the basePackage, just for this call.
136 | * @see #getClass()
137 | */
138 | public function getSound(className : String, overrideBasePackage : String = null) : Sound
139 | {
140 | var clazz : Class = getClass(className, overrideBasePackage);
141 | if(clazz)
142 | return new clazz() as Sound;
143 | return null;
144 | }
145 |
146 | /**
147 | * Extract a new instance of package/class combo from the DisplayObject's application domain.
148 | *
149 | * @param classNameOrFullName A straight up class name or full name of a class.
150 | * @param overrideBasePackage Override the basePackage, just for this call.
151 | * @see #getClass()
152 | */
153 | public function getBitmapData(className : String, overrideBasePackage : String = null) : BitmapData
154 | {
155 | var clazz : Class = getClass(className, overrideBasePackage);
156 | if(clazz)
157 | return new clazz(0, 0) as BitmapData;
158 | return null;
159 | }
160 |
161 | /**
162 | * Extract a new instance of package/class combo from the DisplayObject's application domain.
163 | *
164 | * @param classNameOrFullName A straight up class name or full name of a class.
165 | * @param overrideBasePackage Override the basePackage, just for this call.
166 | * @see #getClass()
167 | */
168 | public function getBitmap(className : String, overrideBasePackage : String = null) : Bitmap
169 | {
170 | var bitmapData : BitmapData = getBitmapData(className, overrideBasePackage);
171 | if(bitmapData)
172 | return new Bitmap(bitmapData);
173 | return null;
174 | }
175 | }
176 | }
--------------------------------------------------------------------------------
/src_examples/org/assetloader/example/ALLoggerExample.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.example
2 | {
3 | import org.assetloader.AssetLoader;
4 | import org.assetloader.core.IAssetLoader;
5 | import org.assetloader.signals.LoaderSignal;
6 | import org.assetloader.utils.ALLogger;
7 |
8 | import flash.display.Sprite;
9 | import flash.display.StageAlign;
10 | import flash.display.StageScaleMode;
11 | import flash.events.Event;
12 | import flash.events.MouseEvent;
13 | import flash.filters.BevelFilter;
14 | import flash.filters.DropShadowFilter;
15 | import flash.text.TextField;
16 | import flash.text.TextFieldAutoSize;
17 | import flash.text.TextFieldType;
18 | import flash.text.TextFormat;
19 |
20 | /**
21 | * @author Matan Uberstein
22 | */
23 | public class ALLoggerExample extends Sprite
24 | {
25 | // --- Controls ---//
26 | protected var _btns : Array = [];
27 | // ----------------//
28 |
29 | protected var _assetloader : IAssetLoader;
30 | protected var _field : TextField;
31 | protected var _logger : ALLogger;
32 |
33 | public function ALLoggerExample()
34 | {
35 | stage.scaleMode = StageScaleMode.NO_SCALE;
36 | stage.align = StageAlign.TOP_LEFT;
37 |
38 | initControls();
39 | initConsole();
40 |
41 | _assetloader = new AssetLoader("pr-group");
42 |
43 | // AssetLoader Logger, will output trace statements.
44 | _logger = new ALLogger();
45 | _logger.onLog.add(append);
46 |
47 | // Sample swapping out of indent char.
48 | _logger.indentChar = "--> ";
49 | }
50 |
51 | // --------------------------------------------------------------------------------------------------------------------------------//
52 | // HANDLERS
53 | // --------------------------------------------------------------------------------------------------------------------------------//
54 | protected function load_click_handler(event : MouseEvent) : void
55 | {
56 | append("//------------------------------------------------------------------------------//");
57 | append("USER COMMAND: Load Config");
58 |
59 | _assetloader.onConfigLoaded.addOnce(onConfigLoaded_handler);
60 | _assetloader.addConfig("complex-queue-config.xml");
61 | }
62 |
63 | protected function start_click_handler(event : MouseEvent) : void
64 | {
65 | append("//------------------------------------------------------------------------------//");
66 | append("USER COMMAND: Start Loading");
67 | append("//------------------------------------------------------------------------------//");
68 |
69 | _assetloader.start();
70 | }
71 |
72 | protected function attach_click_handler(event : MouseEvent) : void
73 | {
74 | var field : TextField = event.currentTarget.getChildByName("field");
75 | var verbosity : int = int(TextField(getChildByName("attVInput")).text);
76 | var recursion : int = int(TextField(getChildByName("attRInput")).text);
77 | append("//------------------------------------------------------------------------------//");
78 | if(field.text == "Attach Logger ")
79 | {
80 | field.text = "Detach Logger";
81 | _logger.attach(_assetloader, verbosity, recursion);
82 | append("USER COMMAND: Attach Logger | verbosity=" + verbosity + " | recursion=" + recursion);
83 | }
84 | else
85 | {
86 | field.text = "Attach Logger ";
87 | _logger.detach(_assetloader, verbosity, recursion);
88 | append("USER COMMAND: Detach Logger | verbosity=" + verbosity + " | recursion=" + recursion);
89 | }
90 | append("//------------------------------------------------------------------------------//");
91 | }
92 |
93 | protected function explode_click_handler(event : MouseEvent) : void
94 | {
95 | var verbosity : int = int(TextField(getChildByName("expVInput")).text);
96 | var recursion : int = int(TextField(getChildByName("expRInput")).text);
97 |
98 | append("//------------------------------------------------------------------------------//");
99 | append("USER COMMAND: Explode | verbosity=" + verbosity + " | recursion=" + recursion);
100 | append("//------------------------------------------------------------------------------//");
101 |
102 | _logger.explode(_assetloader, verbosity, recursion);
103 | }
104 |
105 | protected function expStats_click_handler(event : MouseEvent) : void
106 | {
107 | var recursion : int = int(TextField(getChildByName("stsRInput")).text);
108 |
109 | append("//------------------------------------------------------------------------------//");
110 | append("USER COMMAND: Explode | recursion=" + recursion);
111 | append("//------------------------------------------------------------------------------//");
112 |
113 | _logger.explodeStats(_assetloader, recursion);
114 | }
115 |
116 | protected function clear_click_handler(event:MouseEvent) : void
117 | {
118 | _field.text = "";
119 | }
120 |
121 | protected function onConfigLoaded_handler(signal : LoaderSignal) : void
122 | {
123 | append("... Config Loaded");
124 | append("//------------------------------------------------------------------------------//");
125 | }
126 |
127 | // --------------------------------------------------------------------------------------------------------------------------------//
128 | // CONTROLS
129 | // --------------------------------------------------------------------------------------------------------------------------------//
130 | protected function initControls() : void
131 | {
132 | addButton("Load Config", load_click_handler);
133 | addButton("Start Loading", start_click_handler);
134 | addButton("Attach Logger ", attach_click_handler);
135 | addInputs("att", 0, -1);
136 | addButton("Explode", explode_click_handler);
137 | addInputs("exp", 0, -1);
138 | addButton("Explode Stats", expStats_click_handler);
139 | addInputs("sts", 0, -1);
140 | addButton("Clear Console", clear_click_handler);
141 |
142 | removeChild(getChildByName("stsVInput"));
143 | }
144 |
145 | protected function addButton(label : String, clickHandler : Function) : Sprite
146 | {
147 | var field : TextField = new TextField();
148 | field.defaultTextFormat = new TextFormat("Arial", 12, 0xFFFFFF, true);
149 | field.autoSize = TextFieldAutoSize.LEFT;
150 | field.x = 4;
151 | field.y = 4;
152 | field.name = "field";
153 | field.mouseEnabled = false;
154 | field.text = label;
155 |
156 | var btn : Sprite = new Sprite();
157 | var pBtn : Sprite = _btns[_btns.length - 1];
158 | if(pBtn)
159 | btn.x = pBtn.x + pBtn.width + 6;
160 | with(btn.graphics)
161 | {
162 | beginFill(0x333333);
163 | drawRoundRect(0, 0, field.width + 8, field.height + 8, 3);
164 | }
165 | btn.buttonMode = true;
166 | btn.filters = [new BevelFilter(2, 45, 0xFFFFFF, .6, 0, .2, 5, 5, 1, 3), new DropShadowFilter(2, 45, 0, .3, 5, 5, 1, 3)];
167 | btn.addEventListener(MouseEvent.CLICK, clickHandler);
168 | btn.addChild(field);
169 | _btns.push(btn);
170 | addChild(btn);
171 |
172 | return btn;
173 | }
174 |
175 | protected function addInputs(prefix : String, valueV : int, valueR : int) : void
176 | {
177 | var btn : Sprite = _btns[_btns.length - 1];
178 | if(btn)
179 | {
180 | createInput(prefix + "V", valueV, btn.x, (btn.width / 2) - 4);
181 | createInput(prefix + "R", valueR, btn.x + (btn.width / 2) + 2, (btn.width / 2) - 4);
182 | }
183 | }
184 |
185 | protected function createInput(prefix : String, value : int, x : Number, width : Number) : void
186 | {
187 | var input : TextField = new TextField();
188 | input.defaultTextFormat = new TextFormat("Courier New", 12, null, null, null, null, null, null, "center");
189 | input.border = true;
190 | input.type = TextFieldType.INPUT;
191 | input.x = x;
192 | input.y = 32;
193 | input.width = width;
194 | input.height = 18;
195 | input.restrict = "\-0-4";
196 | input.maxChars = 2;
197 | input.name = prefix + "Input";
198 | input.text = String(value);
199 | addChild(input);
200 | }
201 |
202 | // --------------------------------------------------------------------------------------------------------------------------------//
203 | // CONSOLE
204 | // --------------------------------------------------------------------------------------------------------------------------------//
205 | protected function initConsole() : void
206 | {
207 | _field = new TextField();
208 | _field.defaultTextFormat = new TextFormat("Courier New", 12);
209 | _field.multiline = true;
210 | _field.selectable = true;
211 | _field.wordWrap = false;
212 | _field.y = 60;
213 | _field.width = stage.stageWidth;
214 | _field.height = stage.stageHeight - 60;
215 |
216 | stage.addEventListener(Event.RESIZE, resize_handler);
217 |
218 | addChild(_field);
219 | }
220 |
221 | protected function append(text : String) : void
222 | {
223 | _field.appendText(text + "\n");
224 | }
225 |
226 | protected function resize_handler(event : Event) : void
227 | {
228 | _field.width = stage.stageWidth;
229 | _field.height = stage.stageHeight - 60;
230 | }
231 | }
232 | }
233 |
--------------------------------------------------------------------------------
/src_examples/org/assetloader/example/AddConfigComplexExample.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.example
2 | {
3 | import org.assetloader.AssetLoader;
4 | import org.assetloader.core.IAssetLoader;
5 | import org.assetloader.core.ILoadStats;
6 | import org.assetloader.core.ILoader;
7 | import org.assetloader.signals.ErrorSignal;
8 | import org.assetloader.signals.LoaderSignal;
9 |
10 | import flash.display.Sprite;
11 | import flash.display.StageAlign;
12 | import flash.display.StageScaleMode;
13 | import flash.events.Event;
14 | import flash.text.TextField;
15 | import flash.text.TextFormat;
16 | import flash.utils.Dictionary;
17 |
18 | /**
19 | * @author Matan Uberstein
20 | */
21 | public class AddConfigComplexExample extends Sprite
22 | {
23 | protected var _assetloader : IAssetLoader;
24 | protected var _field : TextField;
25 |
26 | public function AddConfigComplexExample()
27 | {
28 | stage.scaleMode = StageScaleMode.NO_SCALE;
29 | stage.align = StageAlign.TOP_LEFT;
30 |
31 | initConsole();
32 |
33 | // Just for the output's sake, We are giving our 'primary-loader' a shorther id that matches with the other groups
34 | _assetloader = new AssetLoader("pr-group");
35 |
36 | // Passing config as a URL.
37 | _assetloader.addConfig("complex-queue-config.xml");
38 |
39 | // Because we are passing the config as a URL, we need wait until AssetLoader fires onConfigLoaded before stating the queue.
40 | _assetloader.onConfigLoaded.add(onConfigLoaded_handler);
41 | }
42 |
43 | // --------------------------------------------------------------------------------------------------------------------------------//
44 | // HANDLERS
45 | // --------------------------------------------------------------------------------------------------------------------------------//
46 | protected function onConfigLoaded_handler(signal : LoaderSignal) : void
47 | {
48 | // Do your clean up!
49 | _assetloader.onConfigLoaded.remove(onConfigLoaded_handler);
50 |
51 | // Before we start, lets add the listeners to the child group loaders.
52 | var group1 : IAssetLoader = _assetloader.getAssetLoader('group-01');
53 | addListenersToLoader(group1);
54 |
55 | // group-02 is nested inside group1.
56 | var group2 : IAssetLoader = group1.getAssetLoader('group-02');
57 | addListenersToLoader(group2);
58 |
59 | // Add Listener to our Primary Loader
60 | addListenersToLoader(_assetloader);
61 |
62 | // Now Start the queue!
63 | _assetloader.start();
64 | }
65 |
66 | protected function onChildOpen_handler(signal : LoaderSignal, child : ILoader) : void
67 | {
68 | append("[" + signal.loader.id + "]\t[" + child.id + "]\t\topened \tLatency\t: " + Math.floor(child.stats.latency) + "\tms");
69 | }
70 |
71 | protected function onChildError_handler(signal : ErrorSignal, child : ILoader) : void
72 | {
73 | append("[" + signal.loader.id + "]\t[" + child.id + "]\t\terror \tType\t: " + signal.type + " | Message: " + signal.message);
74 | }
75 |
76 | protected function onChildComplete_handler(signal : LoaderSignal, child : ILoader) : void
77 | {
78 | append("[" + signal.loader.id + "]\t[" + child.id + "]\t\tcomplete\tSpeed\t: " + Math.floor(child.stats.averageSpeed) + "\tkbps");
79 | }
80 |
81 | protected function onComplete_handler(signal : LoaderSignal, assets : Dictionary) : void
82 | {
83 | var loader : IAssetLoader = IAssetLoader(signal.loader);
84 |
85 | // Do your clean up!
86 | removeListenersFromLoader(loader);
87 |
88 | // Our AssetLoader's stats.
89 | var stats : ILoadStats = loader.stats;
90 |
91 | append("\n[" + loader.id + "]");
92 | append("LOADING COMPLETE:");
93 | append("Total Time: " + stats.totalTime + " ms");
94 | append("Average Latency: " + Math.floor(stats.latency) + " ms");
95 | append("Average Speed: " + Math.floor(stats.averageSpeed) + " kbps");
96 | append("Total Bytes: " + stats.bytesTotal);
97 | append("");
98 | }
99 |
100 | // --------------------------------------------------------------------------------------------------------------------------------//
101 | // ADD / REMOVE LISTENERS
102 | // --------------------------------------------------------------------------------------------------------------------------------//
103 | protected function addListenersToLoader(loader : IAssetLoader) : void
104 | {
105 | loader.onChildOpen.add(onChildOpen_handler);
106 | loader.onChildError.add(onChildError_handler);
107 | loader.onChildComplete.add(onChildComplete_handler);
108 |
109 | loader.onComplete.add(onComplete_handler);
110 | }
111 |
112 | protected function removeListenersFromLoader(loader : IAssetLoader) : void
113 | {
114 | loader.onChildOpen.remove(onChildOpen_handler);
115 | loader.onChildError.remove(onChildError_handler);
116 | loader.onChildComplete.remove(onChildComplete_handler);
117 |
118 | loader.onComplete.remove(onComplete_handler);
119 | }
120 |
121 | // --------------------------------------------------------------------------------------------------------------------------------//
122 | // CONSOLE
123 | // --------------------------------------------------------------------------------------------------------------------------------//
124 | protected function initConsole() : void
125 | {
126 | _field = new TextField();
127 | _field.defaultTextFormat = new TextFormat("Courier New", 12);
128 | _field.multiline = true;
129 | _field.selectable = true;
130 | _field.wordWrap = false;
131 | _field.width = stage.stageWidth;
132 | _field.height = stage.stageHeight;
133 |
134 | stage.addEventListener(Event.RESIZE, resize_handler);
135 |
136 | addChild(_field);
137 | }
138 |
139 | protected function append(text : String) : void
140 | {
141 | _field.appendText(text + "\n");
142 | }
143 |
144 | protected function resize_handler(event : Event) : void
145 | {
146 | _field.width = stage.stageWidth;
147 | _field.height = stage.stageHeight;
148 | }
149 | }
150 | }
151 |
--------------------------------------------------------------------------------
/src_examples/org/assetloader/example/AddConfigExample.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.example
2 | {
3 | import org.assetloader.AssetLoader;
4 | import org.assetloader.core.IAssetLoader;
5 | import org.assetloader.core.ILoadStats;
6 | import org.assetloader.core.ILoader;
7 | import org.assetloader.signals.ErrorSignal;
8 | import org.assetloader.signals.LoaderSignal;
9 |
10 | import flash.display.Sprite;
11 | import flash.display.StageAlign;
12 | import flash.display.StageScaleMode;
13 | import flash.events.Event;
14 | import flash.text.TextField;
15 | import flash.text.TextFormat;
16 | import flash.utils.Dictionary;
17 |
18 | /**
19 | * @author Matan Uberstein
20 | */
21 | public class AddConfigExample extends Sprite
22 | {
23 | protected var _assetloader : IAssetLoader;
24 | protected var _field : TextField;
25 |
26 | public function AddConfigExample()
27 | {
28 | stage.scaleMode = StageScaleMode.NO_SCALE;
29 | stage.align = StageAlign.TOP_LEFT;
30 |
31 | initConsole();
32 |
33 | _assetloader = new AssetLoader();
34 |
35 | // Passing config as a URL.
36 | _assetloader.addConfig("simple-queue-config.xml");
37 |
38 | // Because we are passing the config as a URL, we need wait until AssetLoader fires onConfigLoaded before stating the queue.
39 | _assetloader.onConfigLoaded.add(onConfigLoaded_handler);
40 |
41 | // Add listeners
42 | addListenersToLoader(_assetloader);
43 | }
44 |
45 | // --------------------------------------------------------------------------------------------------------------------------------//
46 | // HANDLERS
47 | // --------------------------------------------------------------------------------------------------------------------------------//
48 | protected function onConfigLoaded_handler(signal : LoaderSignal) : void
49 | {
50 | // Do your clean up!
51 | _assetloader.onConfigLoaded.remove(onConfigLoaded_handler);
52 |
53 | // Start!
54 | _assetloader.start();
55 | }
56 |
57 | protected function onChildOpen_handler(signal : LoaderSignal, child : ILoader) : void
58 | {
59 | append("[" + signal.loader.id + "]\t[" + child.id + "]\t\topened \tLatency\t: " + Math.floor(child.stats.latency) + "\tms");
60 | }
61 |
62 | protected function onChildError_handler(signal : ErrorSignal, child : ILoader) : void
63 | {
64 | append("[" + signal.loader.id + "]\t[" + child.id + "]\t\terror \tType\t: " + signal.type + " | Message: " + signal.message);
65 | }
66 |
67 | protected function onChildComplete_handler(signal : LoaderSignal, child : ILoader) : void
68 | {
69 | append("[" + signal.loader.id + "]\t[" + child.id + "]\t\tcomplete\tSpeed\t: " + Math.floor(child.stats.averageSpeed) + "\tkbps");
70 | }
71 |
72 | protected function onComplete_handler(signal : LoaderSignal, assets : Dictionary) : void
73 | {
74 | var loader : IAssetLoader = IAssetLoader(signal.loader);
75 |
76 | // Do your clean up!
77 | removeListenersFromLoader(loader);
78 |
79 | // Our Primary AssetLoader's stats.
80 | var stats : ILoadStats = loader.stats;
81 |
82 | append("\n[" + loader.id + "]");
83 | append("LOADING COMPLETE:");
84 | append("Total Time: " + stats.totalTime + " ms");
85 | append("Average Latency: " + Math.floor(stats.latency) + " ms");
86 | append("Average Speed: " + Math.floor(stats.averageSpeed) + " kbps");
87 | append("Total Bytes: " + stats.bytesTotal);
88 | append("");
89 | }
90 |
91 | // --------------------------------------------------------------------------------------------------------------------------------//
92 | // ADD / REMOVE LISTENERS
93 | // --------------------------------------------------------------------------------------------------------------------------------//
94 | protected function addListenersToLoader(loader : IAssetLoader) : void
95 | {
96 | loader.onChildOpen.add(onChildOpen_handler);
97 | loader.onChildError.add(onChildError_handler);
98 | loader.onChildComplete.add(onChildComplete_handler);
99 |
100 | loader.onComplete.add(onComplete_handler);
101 | }
102 |
103 | protected function removeListenersFromLoader(loader : IAssetLoader) : void
104 | {
105 | loader.onChildOpen.remove(onChildOpen_handler);
106 | loader.onChildError.remove(onChildError_handler);
107 | loader.onChildComplete.remove(onChildComplete_handler);
108 |
109 | loader.onComplete.remove(onComplete_handler);
110 | }
111 |
112 | // --------------------------------------------------------------------------------------------------------------------------------//
113 | // CONSOLE
114 | // --------------------------------------------------------------------------------------------------------------------------------//
115 | protected function initConsole() : void
116 | {
117 | _field = new TextField();
118 | _field.defaultTextFormat = new TextFormat("Courier New", 12);
119 | _field.multiline = true;
120 | _field.selectable = true;
121 | _field.wordWrap = false;
122 | _field.width = stage.stageWidth;
123 | _field.height = stage.stageHeight;
124 |
125 | stage.addEventListener(Event.RESIZE, resize_handler);
126 |
127 | addChild(_field);
128 | }
129 |
130 | protected function append(text : String) : void
131 | {
132 | _field.appendText(text + "\n");
133 | }
134 |
135 | protected function resize_handler(event : Event) : void
136 | {
137 | _field.width = stage.stageWidth;
138 | _field.height = stage.stageHeight;
139 | }
140 | }
141 | }
142 |
--------------------------------------------------------------------------------
/src_examples/org/assetloader/example/AddLazyExample.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.example
2 | {
3 | import org.assetloader.core.ILoadStats;
4 |
5 | import flash.utils.Dictionary;
6 | import flash.display.StageAlign;
7 | import flash.display.StageScaleMode;
8 | import flash.events.Event;
9 | import flash.text.TextFormat;
10 | import flash.text.TextField;
11 |
12 | import org.assetloader.signals.ErrorSignal;
13 | import org.assetloader.AssetLoader;
14 | import org.assetloader.base.Param;
15 | import org.assetloader.core.IAssetLoader;
16 | import org.assetloader.core.ILoader;
17 | import org.assetloader.signals.LoaderSignal;
18 |
19 | import flash.display.Sprite;
20 |
21 | /**
22 | * @author Matan Uberstein
23 | */
24 | public class AddLazyExample extends Sprite
25 | {
26 | protected var _assetloader : IAssetLoader;
27 | protected var _field : TextField;
28 |
29 | public function AddLazyExample()
30 | {
31 | stage.scaleMode = StageScaleMode.NO_SCALE;
32 | stage.align = StageAlign.TOP_LEFT;
33 |
34 | initConsole();
35 |
36 | _assetloader = new AssetLoader();
37 |
38 | // Child loaders will inherit params.
39 | _assetloader.setParam(Param.PREVENT_CACHE, true);
40 | _assetloader.setParam(Param.BASE, "http://www.matanuberstein.co.za/assets/sample/");
41 |
42 | // Add assets to queue.
43 | _assetloader.addLazy('txt-asset', "sampleTXT.txt");
44 | _assetloader.addLazy('jsn-asset', "sampleJSON.json");
45 | _assetloader.addLazy('css-asset', "sampleCSS.css");
46 | _assetloader.addLazy('xml-asset', "sampleXML.xml");
47 |
48 | _assetloader.addLazy('bin-asset', "sampleZIP.zip");
49 | _assetloader.addLazy('snd-asset', "sampleSOUND.mp3");
50 | _assetloader.addLazy('img-asset', "sampleIMAGE.png");
51 | _assetloader.addLazy('swf-asset', "sampleSWF.swf");
52 |
53 | // AssetLoader returns the ILoader created once added.
54 | var videoLoader : ILoader = _assetloader.addLazy('vid-asset', "sampleVIDEO.flv");
55 | videoLoader.setParam(Param.PREVENT_CACHE, false);
56 | videoLoader.setParam(Param.PRIORITY, 1);
57 |
58 | // Fail on error flag.
59 | //_assetloader.failOnError = true;
60 |
61 | // This is a sample error, the AssetLoader's onComplete will still fire.
62 | _assetloader.addLazy('err-asset', "fileThatDoesNotExist.php");
63 |
64 | // Add listeners
65 | addListenersToLoader(_assetloader);
66 |
67 | // Start!
68 | _assetloader.start();
69 | }
70 |
71 | // --------------------------------------------------------------------------------------------------------------------------------//
72 | // HANDLERS
73 | // --------------------------------------------------------------------------------------------------------------------------------//
74 | protected function onChildOpen_handler(signal : LoaderSignal, child : ILoader) : void
75 | {
76 | append("[" + signal.loader.id + "]\t[" + child.id + "]\t\topened \tLatency\t: " + Math.floor(child.stats.latency) + "\tms");
77 | }
78 |
79 | protected function onChildError_handler(signal : ErrorSignal, child : ILoader) : void
80 | {
81 | append("[" + signal.loader.id + "]\t[" + child.id + "]\t\terror \tType\t: " + signal.type + " | Message: " + signal.message);
82 | }
83 |
84 | protected function onChildComplete_handler(signal : LoaderSignal, child : ILoader) : void
85 | {
86 | append("[" + signal.loader.id + "]\t[" + child.id + "]\t\tcomplete\tSpeed\t: " + Math.floor(child.stats.averageSpeed) + "\tkbps");
87 | }
88 |
89 | protected function onComplete_handler(signal : LoaderSignal, assets : Dictionary) : void
90 | {
91 | var loader : IAssetLoader = IAssetLoader(signal.loader);
92 |
93 | // Do your clean up!
94 | removeListenersFromLoader(loader);
95 |
96 | // Our Primary AssetLoader's stats.
97 | var stats : ILoadStats = loader.stats;
98 |
99 | append("\n[" + loader.id + "]");
100 | append("LOADING COMPLETE:");
101 | append("Total Time: " + stats.totalTime + " ms");
102 | append("Average Latency: " + Math.floor(stats.latency) + " ms");
103 | append("Average Speed: " + Math.floor(stats.averageSpeed) + " kbps");
104 | append("Total Bytes: " + stats.bytesTotal);
105 | append("");
106 | }
107 |
108 | // --------------------------------------------------------------------------------------------------------------------------------//
109 | // ADD / REMOVE LISTENERS
110 | // --------------------------------------------------------------------------------------------------------------------------------//
111 | protected function addListenersToLoader(loader : IAssetLoader) : void
112 | {
113 | loader.onChildOpen.add(onChildOpen_handler);
114 | loader.onChildError.add(onChildError_handler);
115 | loader.onChildComplete.add(onChildComplete_handler);
116 |
117 | loader.onComplete.add(onComplete_handler);
118 | }
119 |
120 | protected function removeListenersFromLoader(loader : IAssetLoader) : void
121 | {
122 | loader.onChildOpen.remove(onChildOpen_handler);
123 | loader.onChildError.remove(onChildError_handler);
124 | loader.onChildComplete.remove(onChildComplete_handler);
125 |
126 | loader.onComplete.remove(onComplete_handler);
127 | }
128 |
129 | // --------------------------------------------------------------------------------------------------------------------------------//
130 | // CONSOLE
131 | // --------------------------------------------------------------------------------------------------------------------------------//
132 | protected function initConsole() : void
133 | {
134 | _field = new TextField();
135 | _field.defaultTextFormat = new TextFormat("Courier New", 12);
136 | _field.multiline = true;
137 | _field.selectable = true;
138 | _field.wordWrap = false;
139 | _field.width = stage.stageWidth;
140 | _field.height = stage.stageHeight;
141 |
142 | stage.addEventListener(Event.RESIZE, resize_handler);
143 |
144 | addChild(_field);
145 | }
146 |
147 | protected function append(text : String) : void
148 | {
149 | _field.appendText(text + "\n");
150 | }
151 |
152 | protected function resize_handler(event : Event) : void
153 | {
154 | _field.width = stage.stageWidth;
155 | _field.height = stage.stageHeight;
156 | }
157 | }
158 | }
159 |
--------------------------------------------------------------------------------
/src_examples/org/assetloader/example/SoundLoaderOnReadyExample.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.example
2 | {
3 | import flash.media.Sound;
4 |
5 | import org.assetloader.signals.LoaderSignal;
6 | import org.assetloader.loaders.SoundLoader;
7 | import org.assetloader.AssetLoader;
8 | import org.assetloader.base.Param;
9 | import org.assetloader.core.IAssetLoader;
10 | import org.assetloader.utils.ALLogger;
11 |
12 | import flash.display.Sprite;
13 | import flash.display.StageAlign;
14 | import flash.display.StageScaleMode;
15 | import flash.events.Event;
16 | import flash.text.TextField;
17 | import flash.text.TextFormat;
18 |
19 | /**
20 | * @author Matan Uberstein
21 | */
22 | public class SoundLoaderOnReadyExample extends Sprite
23 | {
24 | protected var _assetloader : IAssetLoader;
25 | protected var _field : TextField;
26 | protected var _logger : ALLogger;
27 |
28 | public function SoundLoaderOnReadyExample()
29 | {
30 | stage.scaleMode = StageScaleMode.NO_SCALE;
31 | stage.align = StageAlign.TOP_LEFT;
32 |
33 | initConsole();
34 |
35 | _assetloader = new AssetLoader("pr-group");
36 |
37 | _assetloader.setParam(Param.BASE, "http://www.matan.co.za/AudioMixer/");
38 | //_assetloader.setParam(Param.PREVENT_CACHE, true);
39 |
40 | var sndLoader : SoundLoader = SoundLoader(_assetloader.addLazy("sn-asset", "AquoVisit.mp3"));
41 | sndLoader.onReady.add(snd_onReady_handler);
42 |
43 | // AssetLoader Logger, will output trace statements.
44 | _logger = new ALLogger();
45 | _logger.attach(_assetloader, 2);
46 | _logger.onLog.add(append);
47 |
48 | // Sample swapping out of indent char.
49 | _logger.indentChar = "--> ";
50 |
51 | _assetloader.start();
52 | }
53 |
54 | protected function snd_onReady_handler(signal : LoaderSignal, sound : Sound) : void
55 | {
56 | append("READY!!!");
57 | }
58 |
59 | // --------------------------------------------------------------------------------------------------------------------------------//
60 | // CONSOLE
61 | // --------------------------------------------------------------------------------------------------------------------------------//
62 | protected function initConsole() : void
63 | {
64 | _field = new TextField();
65 | _field.defaultTextFormat = new TextFormat("Courier New", 12);
66 | _field.multiline = true;
67 | _field.selectable = true;
68 | _field.wordWrap = false;
69 | _field.width = stage.stageWidth;
70 | _field.height = stage.stageHeight;
71 |
72 | stage.addEventListener(Event.RESIZE, resize_handler);
73 |
74 | addChild(_field);
75 | }
76 |
77 | protected function append(text : String) : void
78 | {
79 | _field.appendText(text + "\n");
80 | }
81 |
82 | protected function resize_handler(event : Event) : void
83 | {
84 | _field.width = stage.stageWidth;
85 | _field.height = stage.stageHeight;
86 | }
87 | }
88 | }
89 |
--------------------------------------------------------------------------------
/src_unit/FlexUnitRunner.mxml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/src_unit/org/assetloader/AssetLoaderTestSuite.as:
--------------------------------------------------------------------------------
1 | package org.assetloader
2 | {
3 |
4 | import org.assetloader.utils.UtilsTestSuite;
5 | import org.assetloader.base.BaseTestSuite;
6 | import org.assetloader.loaders.LoadersTestSuite;
7 | import org.assetloader.parsers.ParsersTestSuite;
8 |
9 | [Suite]
10 | [RunWith("org.flexunit.runners.Suite")]
11 | public class AssetLoaderTestSuite
12 | {
13 | public var baseTestSuite : BaseTestSuite;
14 | public var loadersTestSuite : LoadersTestSuite;
15 | public var assetLoaderlTest : AssetLoaderTest;
16 | public var parsersTestSuite : ParsersTestSuite;
17 | public var utilsTestSuite : UtilsTestSuite;
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src_unit/org/assetloader/base/AbstractLoaderTest.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.base
2 | {
3 | import org.assetloader.core.ILoadStats;
4 | import org.assetloader.core.ILoader;
5 | import org.flexunit.asserts.assertEquals;
6 | import org.flexunit.asserts.assertNotNull;
7 | import org.flexunit.asserts.assertTrue;
8 |
9 | public class AbstractLoaderTest
10 | {
11 | protected var _loaderName : String;
12 |
13 | protected var _id : String = "test-id";
14 | protected var _type : String;
15 |
16 | protected var _hadRequest : Boolean = false;
17 |
18 | protected var _loader : ILoader;
19 |
20 | [BeforeClass]
21 | public static function runBeforeEntireSuite() : void
22 | {
23 | }
24 |
25 | [AfterClass]
26 | public static function runAfterEntireSuite() : void
27 | {
28 | }
29 |
30 | [Before]
31 | public function runBeforeEachTest() : void
32 | {
33 | _type = AssetType.IMAGE;
34 |
35 | _loader = new AbstractLoader(_id, _type);
36 | }
37 |
38 | [After]
39 | public function runAfterEachTest() : void
40 | {
41 | _loader = null;
42 | }
43 |
44 | [Test]
45 | public function implementing() : void
46 | {
47 | assertTrue(_loaderName + " should implement ILoader", _loader is ILoader);
48 | }
49 |
50 | [Test]
51 | public function idAndTypeMatchValuesPassed() : void
52 | {
53 | assertEquals(_loaderName + "#id must match the id passed via constructor", _id, _loader.id);
54 | assertEquals(_loaderName + "#type must match the type passed via constructor", _type, _loader.type);
55 | }
56 |
57 | [Test]
58 | public function signalsReadyOnConstruction() : void
59 | {
60 | assertNotNull(_loaderName + "#onComplete should NOT be null after construction", _loader.onComplete);
61 | assertNotNull(_loaderName + "#onError should NOT be null after construction", _loader.onError);
62 | assertNotNull(_loaderName + "#onHttpStatus should NOT be null after construction", _loader.onHttpStatus);
63 | assertNotNull(_loaderName + "#onOpen should NOT be null after construction", _loader.onOpen);
64 | assertNotNull(_loaderName + "#onProgress should NOT be null after construction", _loader.onProgress);
65 | assertNotNull(_loaderName + "#onAddedToParent should NOT be null after construction", _loader.onAddedToParent);
66 | assertNotNull(_loaderName + "#onRemovedFromParent should NOT be null after construction", _loader.onRemovedFromParent);
67 | assertNotNull(_loaderName + "#onStart should NOT be null after construction", _loader.onStart);
68 | assertNotNull(_loaderName + "#onStop should NOT be null after construction", _loader.onStop);
69 | }
70 |
71 | [Test]
72 | public function statsReadyOnConstruction() : void
73 | {
74 | assertNotNull(_loader + "#stats should NOT be null after construction", _loader.stats);
75 | }
76 |
77 | [Test]
78 | public function statsImplementILoadStats() : void
79 | {
80 | assertTrue(_loaderName + "#stats should implement ILoadStats", (_loader.stats is ILoadStats));
81 | }
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/src_unit/org/assetloader/base/AssetLoaderErrorTest.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.base
2 | {
3 | import org.assetloader.AssetLoader;
4 | import org.assetloader.core.IAssetLoader;
5 | import org.assetloader.core.ILoader;
6 | import org.assetloader.loaders.ImageLoader;
7 | import org.assetloader.loaders.TextLoader;
8 | import org.flexunit.asserts.assertEquals;
9 | import org.flexunit.asserts.assertTrue;
10 | import org.flexunit.asserts.fail;
11 |
12 | import flash.net.URLRequest;
13 |
14 | /**
15 | * @author Matan Uberstein
16 | */
17 | public class AssetLoaderErrorTest
18 | {
19 | [BeforeClass]
20 | public static function runBeforeEntireSuite() : void
21 | {
22 | }
23 |
24 | [AfterClass]
25 | public static function runAfterEntireSuite() : void
26 | {
27 | }
28 |
29 | [Before]
30 | public function runBeforeEachTest() : void
31 | {
32 | }
33 |
34 | [After]
35 | public function runAfterEachTest() : void
36 | {
37 | }
38 |
39 | [Test]
40 | public function invalidUrl_EmptyUrl() : void
41 | {
42 | var factory : LoaderFactory = new LoaderFactory();
43 | try
44 | {
45 | factory.produce("test-id", AssetType.IMAGE, new URLRequest(""));
46 | }
47 | catch(error : AssetLoaderError)
48 | {
49 | assertTrue("error is AssetLoaderError", (error is AssetLoaderError));
50 | assertEquals("error message should be", new AssetLoaderError(AssetLoaderError.INVALID_URL).message, error.message);
51 | return;
52 | }
53 | fail("Error was NOT catched.");
54 | }
55 |
56 | [Test]
57 | public function invalidUrl_NullUrl() : void
58 | {
59 | var factory : LoaderFactory = new LoaderFactory();
60 | try
61 | {
62 | factory.produce("test-id", AssetType.IMAGE, new URLRequest());
63 | }
64 | catch(error : AssetLoaderError)
65 | {
66 | assertTrue("error is AssetLoaderError", (error is AssetLoaderError));
67 | assertEquals("error message", new AssetLoaderError(AssetLoaderError.INVALID_URL).message, error.message);
68 | return;
69 | }
70 | fail("Error was NOT catched.");
71 | }
72 |
73 | [Test]
74 | public function assetAutoTypeRecognized() : void
75 | {
76 | var factory : LoaderFactory = new LoaderFactory();
77 | try
78 | {
79 | factory.produce("test-id", "HERP-DERP-ASSET-TYPE", new URLRequest("someFile.jpg"));
80 | }
81 | catch(error : AssetLoaderError)
82 | {
83 | assertTrue("error is AssetLoaderError", (error is AssetLoaderError));
84 | assertEquals("error message", new AssetLoaderError(AssetLoaderError.ASSET_TYPE_NOT_RECOGNIZED).message, error.message);
85 | return;
86 | }
87 | fail("Error was NOT catched.");
88 | }
89 |
90 | [Test]
91 | public function assetAutoTypeNotFound_WeirdExtension() : void
92 | {
93 | var factory : LoaderFactory = new LoaderFactory();
94 | try
95 | {
96 | factory.produce("test-id", AssetType.AUTO, new URLRequest("someFileWith.weirdExtension"));
97 | }
98 | catch(error : AssetLoaderError)
99 | {
100 | assertTrue("error is AssetLoaderError", (error is AssetLoaderError));
101 | assertEquals("error message", new AssetLoaderError(AssetLoaderError.ASSET_AUTO_TYPE_NOT_FOUND).message, error.message);
102 | return;
103 | }
104 | fail("Error was NOT catched.");
105 | }
106 |
107 | [Test]
108 | public function couldNotParseConfig() : void
109 | {
110 | var assetloader : IAssetLoader = new AssetLoader();
111 | try
112 | {
113 | assetloader.addConfig("");
114 | }
115 | catch(error : AssetLoaderError)
116 | {
117 | assertTrue("error is AssetLoaderError", (error is AssetLoaderError));
118 | assertEquals("error message", new AssetLoaderError(AssetLoaderError.COULD_NOT_PARSE_CONFIG(assetloader.id, 'Error #1085: The element type "loader" must be terminated by the matching end-tag "".')).message, error.message);
119 | return;
120 | }
121 | fail("Error was NOT catched.");
122 | }
123 |
124 | [Test]
125 | public function alreadyContainsLoaderWithId() : void
126 | {
127 | var assetloader : IAssetLoader = new AssetLoader();
128 | try
129 | {
130 | assetloader.addLazy("test-id", "sampleTXT.txt");
131 | assetloader.addLazy("test-id", "sampleTXT2.txt");
132 | }
133 | catch(error : AssetLoaderError)
134 | {
135 | assertTrue("error is AssetLoaderError", (error is AssetLoaderError));
136 | assertEquals("error message", new AssetLoaderError(AssetLoaderError.ALREADY_CONTAINS_LOADER_WITH_ID(assetloader.id, "test-id")).message, error.message);
137 | return;
138 | }
139 | fail("Error was NOT catched.");
140 | }
141 |
142 | [Test]
143 | public function circularReferenceFound_00() : void
144 | {
145 | var g1 : IAssetLoader = new AssetLoader("g1");
146 |
147 | try
148 | {
149 | g1.addLoader(g1);
150 | }
151 | catch(error : AssetLoaderError)
152 | {
153 | assertTrue("error is AssetLoaderError", (error is AssetLoaderError));
154 | assertEquals("error message", new AssetLoaderError(AssetLoaderError.CIRCULAR_REFERENCE_FOUND(g1.id)).message, error.message);
155 | return;
156 | }
157 | fail("Error was NOT catched.");
158 | }
159 |
160 | [Test]
161 | public function circularReferenceFound_01() : void
162 | {
163 | var g1 : IAssetLoader = new AssetLoader("g1");
164 | var g2 : IAssetLoader = new AssetLoader("g2");
165 |
166 | g1.addLoader(g2);
167 |
168 | try
169 | {
170 | g2.addLoader(g1);
171 | }
172 | catch(error : AssetLoaderError)
173 | {
174 | assertTrue("error is AssetLoaderError", (error is AssetLoaderError));
175 | assertEquals("error message", new AssetLoaderError(AssetLoaderError.CIRCULAR_REFERENCE_FOUND(g1.id)).message, error.message);
176 | return;
177 | }
178 | fail("Error was NOT catched.");
179 | }
180 |
181 | [Test]
182 | public function circularReferenceFound_02() : void
183 | {
184 | var g1 : IAssetLoader = new AssetLoader("g1");
185 | var g2 : IAssetLoader = new AssetLoader("g2");
186 | var g3 : IAssetLoader = new AssetLoader("g3");
187 |
188 | g1.addLoader(g2);
189 | g2.addLoader(g3);
190 |
191 | try
192 | {
193 | g3.addLoader(g1);
194 | }
195 | catch(error : AssetLoaderError)
196 | {
197 | assertTrue("error is AssetLoaderError", (error is AssetLoaderError));
198 | assertEquals("error message", new AssetLoaderError(AssetLoaderError.CIRCULAR_REFERENCE_FOUND(g1.id)).message, error.message);
199 | return;
200 | }
201 | fail("Error was NOT catched.");
202 | }
203 |
204 | [Test]
205 | public function alreadyContainedByOther() : void
206 | {
207 | var g1 : IAssetLoader = new AssetLoader("g1");
208 | var g2 : IAssetLoader = new AssetLoader("g2");
209 | var l1 : ILoader = new TextLoader(new URLRequest("sampleTXT.txt"));
210 |
211 | g1.addLoader(l1);
212 |
213 | try
214 | {
215 | g2.addLoader(l1);
216 | }
217 | catch(error : AssetLoaderError)
218 | {
219 | assertTrue("error is AssetLoaderError", (error is AssetLoaderError));
220 | assertEquals("error message", new AssetLoaderError(AssetLoaderError.ALREADY_CONTAINED_BY_OTHER(l1.id, g1.id)).message, error.message);
221 | return;
222 | }
223 | fail("Error was NOT catched.");
224 | }
225 |
226 | [Test]
227 | public function alreadyContainsLoader() : void
228 | {
229 | var monitor : StatsMonitor = new StatsMonitor();
230 | var l1 : ILoader = new TextLoader(new URLRequest("assets/test/testTXT.txt"));
231 | var l2 : ILoader = new ImageLoader(new URLRequest("assets/test/testIMAGE.png"));
232 | try
233 | {
234 | monitor.add(l1);
235 | monitor.add(l2);
236 | // Adding l2 twice to produce error.
237 | monitor.add(l2);
238 | }
239 | catch(error : AssetLoaderError)
240 | {
241 | assertTrue("error is AssetLoaderError", (error is AssetLoaderError));
242 | assertEquals("error message", new AssetLoaderError(AssetLoaderError.ALREADY_CONTAINS_LOADER).message, error.message);
243 | return;
244 | }
245 | fail("Error was NOT catched.");
246 | }
247 |
248 | [Test]
249 | public function doesNotContainLoader() : void
250 | {
251 | var monitor : StatsMonitor = new StatsMonitor();
252 | var l1 : ILoader = new TextLoader(new URLRequest("assets/test/testTXT.txt"));
253 | var l2 : ILoader = new ImageLoader(new URLRequest("assets/test/testIMAGE.png"));
254 |
255 | monitor.add(l1);
256 | try
257 | {
258 | //Remove l2 which was never added.
259 | monitor.remove(l2);
260 | }
261 | catch(error : AssetLoaderError)
262 | {
263 | assertTrue("error is AssetLoaderError", (error is AssetLoaderError));
264 | assertEquals("error message", new AssetLoaderError(AssetLoaderError.DOESNT_CONTAIN_LOADER).message, error.message);
265 | return;
266 | }
267 | fail("Error was NOT catched.");
268 | }
269 | }
270 | }
271 |
--------------------------------------------------------------------------------
/src_unit/org/assetloader/base/AssetLoaderQueueTest.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.base
2 | {
3 | import org.assetloader.AssetLoader;
4 | import org.assetloader.loaders.TextLoader;
5 | import org.flexunit.asserts.assertEquals;
6 | import org.flexunit.asserts.assertFalse;
7 | import org.flexunit.asserts.assertNotNull;
8 | import org.flexunit.asserts.assertNull;
9 | import org.flexunit.asserts.assertTrue;
10 |
11 | import flash.net.URLRequest;
12 |
13 | public class AssetLoaderQueueTest
14 | {
15 | protected var _path : String = "test/testTXT.txt";
16 | protected var _id : String = "test-id-";
17 |
18 | protected var _assetloader : AssetLoader;
19 |
20 | [BeforeClass]
21 | public static function runBeforeEntireSuite() : void
22 | {
23 | }
24 |
25 | [AfterClass]
26 | public static function runAfterEntireSuite() : void
27 | {
28 | }
29 |
30 | [Before]
31 | public function runBeforeEachTest() : void
32 | {
33 | _assetloader = new AssetLoader();
34 | }
35 |
36 | [After]
37 | public function runAfterEachTest() : void
38 | {
39 | _assetloader = null;
40 | }
41 |
42 | [Test]
43 | public function addingToQueue() : void
44 | {
45 | _assetloader.addLoader(new TextLoader(new URLRequest(_path), _id + 1));
46 |
47 | assertNotNull("AssetLoader#add should return the ILoader produced", _assetloader.add(_id + 2, new URLRequest(_path)));
48 |
49 | assertNotNull("AssetLoader#addLazy should return the ILoader produced", _assetloader.addLazy(_id + 3, _path));
50 |
51 | assertEquals("AssetLoader#numLoaders should be equal to 3", _assetloader.numLoaders, 3);
52 | assertEquals("AssetLoader#ids length should be equal to 3", _assetloader.ids.length, 3);
53 |
54 | assertTrue("AssetLoader#hasLoader should be true", (_assetloader.hasLoader(_id + 1)));
assertTrue("AssetLoader#hasLoader should be true", (_assetloader.hasLoader(_id + 2)));
assertTrue("AssetLoader#hasLoader should be true", (_assetloader.hasLoader(_id + 3)));
55 |
56 | assertNotNull("AssetLoader#getLoader should NOT be null", (_assetloader.getLoader(_id + 1)));
assertNotNull("AssetLoader#getLoader should NOT be null", (_assetloader.getLoader(_id + 2)));
assertNotNull("AssetLoader#getLoader should NOT be null", (_assetloader.getLoader(_id + 3)));
57 | }
58 |
59 | [Test]
60 | public function removingFromQueue() : void
61 | {
62 | buildQueue();
63 |
64 | assertNotNull("AssetLoader#remove should return the loader removed from the queue", _assetloader.remove(_id + 1));
65 | assertEquals("AssetLoader#numLoaders should be equal to 2", _assetloader.numLoaders, 2);
66 | assertEquals("AssetLoader#ids length should be equal to 2", _assetloader.ids.length, 2);
67 | assertFalse("AssetLoader#hasLoader should be true", (_assetloader.hasLoader(_id + 1)));
68 | assertNull("AssetLoader#getLoader should be null", (_assetloader.getLoader(_id + 1)));
69 |
70 | assertNotNull("AssetLoader#remove should return the loader removed from the queue", _assetloader.remove(_id + 2));
71 | assertEquals("AssetLoader#numLoaders should be equal to 1", _assetloader.numLoaders, 1);
72 | assertEquals("AssetLoader#ids length should be equal to 1", _assetloader.ids.length, 1);
73 | assertFalse("AssetLoader#hasLoader should be true", (_assetloader.hasLoader(_id + 1)));
74 | assertNull("AssetLoader#getLoader should be null", (_assetloader.getLoader(_id + 1)));
75 |
76 | assertNotNull("AssetLoader#remove should return the loader removed from the queue", _assetloader.remove(_id + 3));
77 | assertEquals("AssetLoader#numLoaders should be equal to 0", _assetloader.numLoaders, 0);
78 | assertEquals("AssetLoader#ids length should be equal to 0", _assetloader.ids.length, 0);
79 | assertFalse("AssetLoader#hasLoader should be true", (_assetloader.hasLoader(_id + 3)));
80 | assertNull("AssetLoader#getLoader should be null", (_assetloader.getLoader(_id + 3)));
81 | }
82 |
83 | [Test]
84 | public function destroyQueue() : void
85 | {
86 | buildQueue();
87 |
88 | _assetloader.destroy();
89 |
90 | assertFalse("AssetLoader#hasLoader should be false", (_assetloader.hasLoader(_id + 1)));
91 | assertNull("AssetLoader#getLoader should be null", (_assetloader.getLoader(_id + 1)));
92 |
93 | assertFalse("AssetLoader#hasLoader should be false", (_assetloader.hasLoader(_id + 1)));
94 | assertNull("AssetLoader#getLoader should be null", (_assetloader.getLoader(_id + 1)));
95 |
96 | assertFalse("AssetLoader#hasLoader should be false", (_assetloader.hasLoader(_id + 3)));
97 | assertNull("AssetLoader#getLoader should be null", (_assetloader.getLoader(_id + 3)));
98 | }
99 |
100 | protected function buildQueue() : void
101 | {
102 | _assetloader.addLoader(new TextLoader(new URLRequest(_path), _id + 1));
103 | _assetloader.add(_id + 2, new URLRequest(_path));
104 | _assetloader.addLazy(_id + 3, _path);
105 | }
106 | }
107 | }
108 |
--------------------------------------------------------------------------------
/src_unit/org/assetloader/base/BaseTestSuite.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.base
2 | {
3 | [Suite]
4 | [RunWith("org.flexunit.runners.Suite")]
5 | public class BaseTestSuite
6 | {
7 | public var abstractLoaderTest : AbstractLoaderTest;
8 |
public var assetLoaderQueueTest : AssetLoaderQueueTest;
9 |
public var assetLoaderErrorTest : AssetLoaderErrorTest;
10 |
public var loaderFactoryTest : LoaderFactoryTest;
11 |
public var loaderStatsTest : LoaderStatsTest;
12 |
13 | public var statsMonitorTest : StatsMonitorTest;
14 |
public var paramTest : ParamTest;
}
15 | }
16 |
--------------------------------------------------------------------------------
/src_unit/org/assetloader/base/LoaderFactoryTest.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.base
2 | {
3 | import org.assetloader.AssetLoader;
4 | import org.assetloader.core.IAssetLoader;
5 | import org.assetloader.core.ILoader;
6 | import org.assetloader.loaders.BinaryLoader;
7 | import org.assetloader.loaders.CSSLoader;
8 | import org.assetloader.loaders.DisplayObjectLoader;
9 | import org.assetloader.loaders.ImageLoader;
10 | import org.assetloader.loaders.JSONLoader;
11 | import org.assetloader.loaders.SWFLoader;
12 | import org.assetloader.loaders.SoundLoader;
13 | import org.assetloader.loaders.TextLoader;
14 | import org.assetloader.loaders.VideoLoader;
15 | import org.assetloader.loaders.XMLLoader;
16 | import org.flexunit.asserts.assertNotNull;
17 | import org.flexunit.asserts.assertTrue;
18 |
19 | import flash.net.URLRequest;
20 |
21 | public class LoaderFactoryTest
22 | {
23 | protected var _path : String = "http://www.matan.co.za/AssetLoader/testAssets/";
24 | protected var _id : String = "test-id";
25 | protected var _factory : LoaderFactory;
26 |
27 | protected var _producedLoader : ILoader;
28 |
29 | [BeforeClass]
30 | public static function runBeforeEntireSuite() : void
31 | {
32 | }
33 |
34 | [AfterClass]
35 | public static function runAfterEntireSuite() : void
36 | {
37 | }
38 |
39 | [Before]
40 | public function runBeforeEachTest() : void
41 | {
42 | _factory = new LoaderFactory();
43 | }
44 |
45 | [After]
46 | public function runAfterEachTest() : void
47 | {
48 | assertNotNull("Produced loader should NOT be null", _producedLoader);
assertTrue("Produced loader should implement ILoader", (_producedLoader is ILoader));
49 |
50 | _factory = null;
51 | _producedLoader = null;
52 | }
53 |
54 | [Test]
55 | public function produceTextType() : void
56 | {
57 | _producedLoader = _factory.produce(_id, AssetType.TEXT, new URLRequest(_path + "sampleTXT.txt"));
58 | assertTrue("Produced loader should be an instance of TextLoader", (_producedLoader is TextLoader));
59 | }
60 |
61 | [Test]
62 | public function produceJsonType() : void
63 | {
64 | _producedLoader = _factory.produce(_id, AssetType.JSON, new URLRequest(_path + "sampleJSON.json"));
65 | assertTrue("Produced loader should be an instance of JSONLoader", (_producedLoader is JSONLoader));
66 | }
67 |
68 | [Test]
69 | public function produceXmlType() : void
70 | {
71 | _producedLoader = _factory.produce(_id, AssetType.XML, new URLRequest(_path + "sampleXML.xml"));
72 | assertTrue("Produced loader should be an instance of XMLLoader", (_producedLoader is XMLLoader));
73 | }
74 |
75 | [Test]
76 | public function produceCssType() : void
77 | {
78 | _producedLoader = _factory.produce(_id, AssetType.CSS, new URLRequest(_path + "sampleCSS.css"));
79 | assertTrue("Produced loader should be an instance of CSSLoader", (_producedLoader is CSSLoader));
80 | }
81 |
82 | [Test]
83 | public function produceBinaryType() : void
84 | {
85 | _producedLoader = _factory.produce(_id, AssetType.BINARY, new URLRequest(_path + "sampleZIP.zip"));
86 | assertTrue("Produced loader should be an instance of BinaryLoader", (_producedLoader is BinaryLoader));
87 | }
88 |
89 | [Test]
90 | public function produceDisplayObjectType() : void
91 | {
92 | _producedLoader = _factory.produce(_id, AssetType.DISPLAY_OBJECT, new URLRequest(_path + "sampleSWF.swf"));
93 | assertTrue("Produced loader should be an instance of DisplayObjectLoader", (_producedLoader is DisplayObjectLoader));
94 | }
95 |
96 | [Test]
97 | public function produceSwfType() : void
98 | {
99 | _producedLoader = _factory.produce(_id, AssetType.SWF, new URLRequest(_path + "sampleSWF.swf"));
100 | assertTrue("Produced loader should be an instance of SWFLoader", (_producedLoader is SWFLoader));
101 | }
102 |
103 | [Test]
104 | public function produceImageType() : void
105 | {
106 | _producedLoader = _factory.produce(_id, AssetType.IMAGE, new URLRequest(_path + "sampleIMAGE.jpg"));
107 | assertTrue("Produced loader should be an instance of ImageLoader", (_producedLoader is ImageLoader));
108 | }
109 |
110 | [Test]
111 | public function produceSoundType() : void
112 | {
113 | _producedLoader = _factory.produce(_id, AssetType.SOUND, new URLRequest(_path + "sampleSOUND.mp3"));
114 | assertTrue("Produced loader should be an instance of SoundLoader", (_producedLoader is SoundLoader));
115 | }
116 |
117 | [Test]
118 | public function produceVideoType() : void
119 | {
120 | _producedLoader = _factory.produce(_id, AssetType.VIDEO, new URLRequest(_path + "sampleVIDEO.mp4"));
121 | assertTrue("Produced loader should be an instance of VideoLoader", (_producedLoader is VideoLoader));
122 | }
123 |
124 | [Test]
125 | public function produceGroupType() : void
126 | {
127 | _producedLoader = _factory.produce(_id, AssetType.GROUP);
128 | assertTrue("Produced loader should implement IAssetLoader", (_producedLoader is IAssetLoader));
129 | assertTrue("Produced loader should be an instance of AssetLoader", (_producedLoader is AssetLoader));
130 | }
131 |
132 | //--------------------------------------------------------------------------------------------------------------------------------//
133 | // AUTO TYPE
134 | //--------------------------------------------------------------------------------------------------------------------------------//
135 |
136 | [Test]
137 | public function autoProduceTextType() : void
138 | {
139 | _producedLoader = _factory.produce(_id, AssetType.AUTO, new URLRequest(_path + "sampleTXT.txt"));
140 | assertTrue("Produced loader should be an instance of TextLoader", (_producedLoader is TextLoader));
141 | }
142 |
143 | [Test]
144 | public function autoProduceJsonType() : void
145 | {
146 | _producedLoader = _factory.produce(_id, AssetType.AUTO, new URLRequest(_path + "sampleJSON.json"));
147 | assertTrue("Produced loader should be an instance of JSONLoader", (_producedLoader is JSONLoader));
148 | }
149 |
150 | [Test]
151 | public function autoProduceXmlType() : void
152 | {
153 | _producedLoader = _factory.produce(_id, AssetType.AUTO, new URLRequest(_path + "sampleXML.xml"));
154 | assertTrue("Produced loader should be an instance of XMLLoader", (_producedLoader is XMLLoader));
155 | }
156 |
157 | [Test]
158 | public function autoProduceCssType() : void
159 | {
160 | _producedLoader = _factory.produce(_id, AssetType.AUTO, new URLRequest(_path + "sampleCSS.css"));
161 | assertTrue("Produced loader should be an instance of CSSLoader", (_producedLoader is CSSLoader));
162 | }
163 |
164 | [Test]
165 | public function autoProduceBinaryType() : void
166 | {
167 | _producedLoader = _factory.produce(_id, AssetType.AUTO, new URLRequest(_path + "sampleZIP.zip"));
168 | assertTrue("Produced loader should be an instance of BinaryLoader", (_producedLoader is BinaryLoader));
169 | }
170 |
171 | [Test]
172 | public function autoProduceSwfType() : void
173 | {
174 | _producedLoader = _factory.produce(_id, AssetType.AUTO, new URLRequest(_path + "sampleSWF.swf"));
175 | assertTrue("Produced loader should be an instance of SWFLoader", (_producedLoader is SWFLoader));
176 | }
177 |
178 | [Test]
179 | public function autoProduceImageType() : void
180 | {
181 | _producedLoader = _factory.produce(_id, AssetType.AUTO, new URLRequest(_path + "sampleIMAGE.jpg"));
182 | assertTrue("Produced loader should be an instance of ImageLoader", (_producedLoader is ImageLoader));
183 | }
184 |
185 | [Test]
186 | public function autoProduceSoundType() : void
187 | {
188 | _producedLoader = _factory.produce(_id, AssetType.AUTO, new URLRequest(_path + "sampleSOUND.mp3"));
189 | assertTrue("Produced loader should be an instance of SoundLoader", (_producedLoader is SoundLoader));
190 | }
191 |
192 | [Test]
193 | public function autoProduceVideoType() : void
194 | {
195 | _producedLoader = _factory.produce(_id, AssetType.AUTO, new URLRequest(_path + "sampleVIDEO.mp4"));
196 | assertTrue("Produced loader should be an instance of VideoLoader", (_producedLoader is VideoLoader));
197 | }
198 |
199 | [Test]
200 | public function autoProduceGroupType() : void
201 | {
202 | _producedLoader = _factory.produce(_id);
203 | assertTrue("Produced loader should implement IAssetLoader", (_producedLoader is IAssetLoader));
204 | assertTrue("Produced loader should be an instance of AssetLoader", (_producedLoader is AssetLoader));
205 | }
206 | }
207 | }
208 |
--------------------------------------------------------------------------------
/src_unit/org/assetloader/base/LoaderStatsTest.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.base
2 | {
3 | import org.assetloader.core.ILoadStats;
4 | import org.flexunit.asserts.assertEquals;
5 | import org.flexunit.asserts.assertTrue;
6 | import org.flexunit.async.Async;
7 |
8 | import flash.events.TimerEvent;
9 | import flash.utils.Timer;
10 |
11 | public class LoaderStatsTest
12 | {
13 | protected var _stats : LoaderStats;
14 |
15 | [BeforeClass]
16 | public static function runBeforeEntireSuite() : void
17 | {
18 | }
19 |
20 | [AfterClass]
21 | public static function runAfterEntireSuite() : void
22 | {
23 | }
24 |
25 | [Before]
26 | public function runBeforeEachTest() : void
27 | {
28 | _stats = new LoaderStats();
29 | }
30 |
31 | [After]
32 | public function runAfterEachTest() : void
33 | {
34 | _stats = null;
35 | }
36 |
37 | [Test]
38 | public function implementsILoadStats() : void
39 | {
40 | assertTrue("LoaderStats should implement ILoadStats", _stats is ILoadStats);
41 | }
42 |
43 | [Test (async)]
44 | public function delayedOpen() : void
45 | {
46 | _stats.start();
47 | var timer : Timer = new Timer(250, 1);
48 | timer.addEventListener(TimerEvent.TIMER_COMPLETE, Async.asyncHandler(this, open, 500), false, 0, true);
49 | timer.start();
50 | }
51 |
52 | protected function open(event : TimerEvent, data : Object) : void
53 | {
54 | _stats.open();
55 | assertTrue("LoaderStats#latency should be more than 250", (_stats.latency > 250));
56 | }
57 |
58 | [Test]
59 | public function update() : void
60 | {
61 | _stats.start();
62 | _stats.open();
63 | _stats.update(100, 1000);
64 | assertEquals("LoaderStats#bytesLoaded should be equal to 100", _stats.bytesLoaded, 100);
65 | assertEquals("LoaderStats#bytesTotal should be equal to 1000", _stats.bytesTotal, 1000);
66 | assertEquals("LoaderStats#progress should be equal to 10%", _stats.progress, 10);
67 | assertEquals("LoaderStats#totalTime should be equal to 0", _stats.totalTime, 0);
68 |
69 | assertTrue("LoaderStats#speed should be more than 0", (_stats.speed > 0));
70 | assertTrue("LoaderStats#averageSpeed should be more than 0", (_stats.averageSpeed > 0));
71 | }
72 |
73 | [Test (async)]
74 | public function delayedDone() : void
75 | {
76 | _stats.start();
77 | _stats.open();
78 | _stats.update(100, 1000);
79 |
80 | var timer : Timer = new Timer(250, 1);
81 | timer.addEventListener(TimerEvent.TIMER_COMPLETE, Async.asyncHandler(this, done, 500), false, 0, true);
82 | timer.start();
83 | }
84 |
85 | protected function done(event : TimerEvent, data : Object) : void
86 | {
87 | _stats.done();
88 | assertEquals("LoaderStats#bytesLoaded should be equal to 1000", _stats.bytesLoaded, 1000);
89 | assertEquals("LoaderStats#bytesTotal should be equal to 1000", _stats.bytesTotal, 1000);
90 | assertEquals("LoaderStats#progress should be equal to 100%", _stats.progress, 100);
91 | assertTrue("LoaderStats#totalTime should more than 250", _stats.totalTime > 250);
92 | }
93 |
94 | [Test]
95 | public function reset() : void
96 | {
97 | _stats.start();
98 | _stats.open();
99 | _stats.update(100, 1000);
100 | _stats.done();
101 | _stats.reset();
102 | assertEquals("LoaderStats#bytesLoaded should be equal to 0", _stats.bytesLoaded, 0);
103 | assertEquals("LoaderStats#bytesTotal should be equal to 0", _stats.bytesTotal, 0);
104 | assertEquals("LoaderStats#progress should be equal to 0%", _stats.progress, 0);
105 | assertEquals("LoaderStats#latency should be equal to 0", _stats.latency, 0);
106 | assertEquals("LoaderStats#speed should be equal to 0", _stats.speed, 0);
107 | assertEquals("LoaderStats#averageSpeed should be equal to 0", _stats.averageSpeed, 0);
108 | assertEquals("LoaderStats#totalTime should be equal to 0", _stats.totalTime, 0);
109 | }
110 | }
111 | }
112 |
--------------------------------------------------------------------------------
/src_unit/org/assetloader/base/ParamTest.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.base
2 | {
3 | import org.assetloader.core.IParam;
4 | import org.flexunit.asserts.assertEquals;
5 | import org.flexunit.asserts.assertTrue;
6 |
7 | import flash.system.LoaderContext;
8 |
9 | public class ParamTest
10 | {
11 | protected var _param : Param;
12 | protected var _id : String = "test-id";
13 | protected var _value : LoaderContext = new LoaderContext();
14 |
15 | [BeforeClass]
16 | public static function runBeforeEntireSuite() : void
17 | {
18 | }
19 |
20 | [AfterClass]
21 | public static function runAfterEntireSuite() : void
22 | {
23 | }
24 |
25 | [Before]
26 | public function runBeforeEachTest() : void
27 | {
28 | _param = new Param(_id, _value);
29 | }
30 |
31 | [After]
32 | public function runAfterEachTest() : void
33 | {
34 | _param = null;
35 | }
36 |
37 | [Test]
38 | public function implementsIParam() : void
39 | {
40 | assertTrue("Param should implement IParam", _param is IParam);
41 | }
42 |
43 | [Test]
44 | public function retainsId() : void
45 | {
46 | assertEquals("Param should retain id passed", _param.id, _id);
47 | }
48 |
49 | [Test]
50 | public function retainsValue() : void
51 | {
52 | assertEquals("Param should retain value passed", _param.value, _value);
53 | }
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/src_unit/org/assetloader/base/StatsMonitorTest.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.base
2 | {
3 | import org.assetloader.core.ILoadStats;
4 | import org.assetloader.core.ILoader;
5 | import org.assetloader.loaders.ImageLoader;
6 | import org.assetloader.loaders.TextLoader;
7 | import org.assetloader.signals.LoaderSignal;
8 | import org.assetloader.signals.ProgressSignal;
9 | import org.flexunit.asserts.assertEquals;
10 | import org.flexunit.asserts.assertNotNull;
11 | import org.flexunit.asserts.assertNull;
12 | import org.flexunit.asserts.assertTrue;
13 | import org.osflash.signals.utils.SignalAsyncEvent;
14 | import org.osflash.signals.utils.failOnSignal;
15 | import org.osflash.signals.utils.handleSignal;
16 |
17 | import flash.net.URLRequest;
18 |
19 | public class StatsMonitorTest
20 | {
21 | protected var _monitor : StatsMonitor;
22 | protected var _className : String = "StatsMonitor";
23 | protected var _path : String = "assets/test/";
24 |
25 | [BeforeClass]
26 | public static function runBeforeEntireSuite() : void
27 | {
28 | }
29 |
30 | [AfterClass]
31 | public static function runAfterEntireSuite() : void
32 | {
33 | }
34 |
35 | [Before]
36 | public function runBeforeEachTest() : void
37 | {
38 | _monitor = new StatsMonitor();
39 | }
40 |
41 | [After]
42 | public function runAfterEachTest() : void
43 | {
44 | _monitor.destroy();
45 | _monitor = null;
46 | }
47 |
48 | [Test]
49 | public function signalsReadyOnConstruction() : void
50 | {
51 | assertNotNull(_className + "#onOpen should NOT be null after construction", _monitor.onOpen);
52 | assertNotNull(_className + "#onProgress should NOT be null after construction", _monitor.onProgress);
53 | assertNotNull(_className + "#onComplete should NOT be null after construction", _monitor.onComplete);
54 | }
55 |
56 | [Test]
57 | public function adding() : void
58 | {
59 | var l1 : ILoader = new TextLoader(new URLRequest(_path + "testTXT.txt"));
60 | _monitor.add(l1);
61 | assertEquals(_className + "#numLoaders should equal", 1, _monitor.numLoaders);
62 | assertEquals(_className + "#numComplete should equal", 0, _monitor.numComplete);
63 |
64 | var l2 : ILoader = new ImageLoader(new URLRequest(_path + "testIMAGE.png"));
65 | _monitor.add(l2);
66 | assertEquals(_className + "#numLoaders should equal", 2, _monitor.numLoaders);
67 | assertEquals(_className + "#numComplete should equal", 0, _monitor.numComplete);
68 | }
69 |
70 | [Test]
71 | public function removing() : void
72 | {
73 | var l1 : ILoader = new TextLoader(new URLRequest(_path + "testTXT.txt"));
74 | var l2 : ILoader = new ImageLoader(new URLRequest(_path + "testIMAGE.png"));
75 |
76 | _monitor.add(l1);
77 | _monitor.add(l2);
78 |
79 | _monitor.remove(l1);
80 | assertEquals(_className + "#numLoaders should equal", 1, _monitor.numLoaders);
81 | assertEquals(_className + "#numComplete should equal", 0, _monitor.numComplete);
82 |
83 | _monitor.remove(l2);
84 | assertEquals(_className + "#numLoaders should equal", 0, _monitor.numLoaders);
85 | assertEquals(_className + "#numComplete should equal", 0, _monitor.numComplete);
86 | }
87 |
88 | [Test]
89 | public function destroying() : void
90 | {
91 | var l1 : ILoader = new TextLoader(new URLRequest(_path + "testTXT.txt"));
92 | var l2 : ILoader = new ImageLoader(new URLRequest(_path + "testIMAGE.png"));
93 |
94 | _monitor.add(l1);
95 | _monitor.add(l2);
96 |
97 | _monitor.onOpen.add(dummy_onOpen_handler);
98 | _monitor.onProgress.add(dummy_onProgress_handler);
99 | _monitor.onComplete.add(dummy_onComplete_handler);
100 |
101 | _monitor.destroy();
102 | assertEquals(_className + "#numLoaders should equal", 0, _monitor.numLoaders);
103 | assertEquals(_className + "#numComplete should equal", 0, _monitor.numComplete);
104 |
105 | assertEquals(_className + "#onOpen#numListeners should equal", 0, _monitor.onOpen.numListeners);
106 | assertEquals(_className + "#onProgress#numListeners should equal", 0, _monitor.onProgress.numListeners);
107 | assertEquals(_className + "#onComplete#numListeners should equal", 0, _monitor.onComplete.numListeners);
108 |
109 | // Should still be usable, thus test adding again after destroy.
110 |
111 | _monitor.add(l1);
112 | assertEquals(_className + "#numLoaders should equal", 1, _monitor.numLoaders);
113 | assertEquals(_className + "#numComplete should equal", 0, _monitor.numComplete);
114 |
115 | _monitor.add(l2);
116 | assertEquals(_className + "#numLoaders should equal", 2, _monitor.numLoaders);
117 | assertEquals(_className + "#numComplete should equal", 0, _monitor.numComplete);
118 | }
119 |
120 | [Test (async)]
121 | public function onOpenSignal() : void
122 | {
123 | var l1 : ILoader = new TextLoader(new URLRequest(_path + "testTXT.txt"));
124 | var l2 : ILoader = new ImageLoader(new URLRequest(_path + "testIMAGE.png"));
125 |
126 | _monitor.add(l1);
127 | _monitor.add(l2);
128 |
129 | handleSignal(this, _monitor.onOpen, onOpen_handler, 500, {l1:l1, l2:l2});
130 | failOnSignal(this, _monitor.onComplete);
131 |
132 | //only tell the one loader to start, because we are checking the passed loader's value within handler.
133 | l1.start();
134 | }
135 |
136 | protected function onOpen_handler(event : SignalAsyncEvent, data : Object) : void
137 | {
138 | var values : Array = event.args;
139 | assertTrue("Argument 1 should be LoaderSignal", (values[0] is LoaderSignal));
140 |
141 | var signal : LoaderSignal = values[0];
142 | assertNotNull("LoaderSignal#loader should NOT be null", signal.loader);
143 | assertEquals("LoaderSignal#loader should equal", data.l1, signal.loader);
144 | }
145 |
146 | [Test (async)]
147 | public function onProgressSignal() : void
148 | {
149 | var l1 : ILoader = new TextLoader(new URLRequest(_path + "testTXT.txt"));
150 | var l2 : ILoader = new ImageLoader(new URLRequest(_path + "testIMAGE.png"));
151 |
152 | _monitor.add(l1);
153 | _monitor.add(l2);
154 |
155 | handleSignal(this, _monitor.onProgress, onProgress_handler, 500, {l1:l1, l2:l2});
156 | failOnSignal(this, _monitor.onComplete);
157 |
158 | //only tell the one loader to start, because we are checking the passed loader's value within handler.
159 | l1.start();
160 | }
161 |
162 | protected function onProgress_handler(event : SignalAsyncEvent, data : Object) : void
163 | {
164 | var values : Array = event.args;
165 | assertTrue("Argument 1 should be ProgressSignal", (values[0] is ProgressSignal));
166 |
167 | var signal : ProgressSignal = values[0];
168 | assertNotNull("ProgressSignal#loader should NOT be null", signal.loader);
169 | assertEquals("ProgressSignal#loader should equal", data.l1, signal.loader);
170 |
171 | assertTrue("ProgressSignal#latency should be more or equal than 0", signal.latency >= 0);
172 | assertTrue("ProgressSignal#speed should be more or equal than 0", signal.speed >= 0);
173 | assertTrue("ProgressSignal#averageSpeed should be more or equal than 0", signal.averageSpeed >= 0);
174 |
175 | assertTrue("ProgressSignal#progress should be more or equal than 0", signal.progress >= 0);
176 | assertTrue("ProgressSignal#bytesLoaded should be more or equal than 0", signal.bytesLoaded >= 0);
177 | assertTrue("ProgressSignal#bytesTotal should be more than 0", signal.bytesTotal);
178 | }
179 |
180 | [Test (async)]
181 | public function onCompleteSignal() : void
182 | {
183 | var l1 : ILoader = new TextLoader(new URLRequest(_path + "testTXT.txt"));
184 | var l2 : ILoader = new ImageLoader(new URLRequest(_path + "testIMAGE.png"));
185 |
186 | _monitor.add(l1);
187 | _monitor.add(l2);
188 |
189 | handleSignal(this, _monitor.onComplete, onComplete_handler, 500, {l1:l1, l2:l2});
190 |
191 | //Tell both to start, otherwise onComplete will not fire.
192 | l1.start();
193 | l2.start();
194 | }
195 |
196 | protected function onComplete_handler(event : SignalAsyncEvent, data : Object) : void
197 | {
198 | var values : Array = event.args;
199 | assertTrue("Argument 1 should be LoaderSignal", (values[0] is LoaderSignal));
200 |
201 | var signal : LoaderSignal = values[0];
202 | assertNull("LoaderSignal#loader should be null", signal.loader);
203 | assertNotNull("Second argument should NOT be null", values[1]);
204 | assertTrue("Second argument should be ILoadStats", (values[1] is ILoadStats));
205 | }
206 |
207 | // --------------------------------------------------------------------------------------------------------------------------------//
208 | // INTERNAL
209 | // --------------------------------------------------------------------------------------------------------------------------------//
210 | protected function dummy_onOpen_handler(signal : LoaderSignal) : void
211 | {
212 | }
213 |
214 | protected function dummy_onProgress_handler(signal : ProgressSignal) : void
215 | {
216 | }
217 |
218 | protected function dummy_onComplete_handler(signal : LoaderSignal, stats : ILoadStats) : void
219 | {
220 | }
221 | }
222 | }
223 |
--------------------------------------------------------------------------------
/src_unit/org/assetloader/loaders/BinaryLoaderTest.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.loaders
2 | {
3 | import org.assetloader.base.AssetType;
4 | import flash.net.URLRequest;
5 | import flash.utils.ByteArray;
6 |
7 | public class BinaryLoaderTest extends BaseLoaderTest
8 | {
9 | [Before]
10 | override public function runBeforeEachTest() : void
11 | {
12 | super.runBeforeEachTest();
13 |
14 | _loaderName = "BinaryLoader";
15 | _payloadType = ByteArray;
16 | _payloadTypeName = "ByteArray";
17 | _payloadPropertyName = "bytes";
18 | _path += "testZIP.zip";
19 | _type = AssetType.BINARY;
20 |
21 | _loader = new BinaryLoader(new URLRequest(_path), _id);
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src_unit/org/assetloader/loaders/CSSLoaderTest.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.loaders
2 | {
3 | import org.assetloader.base.AssetType;
4 |
5 | import flash.net.URLRequest;
6 | import flash.text.StyleSheet;
7 |
8 | public class CSSLoaderTest extends BaseLoaderTest
9 | {
10 |
11 | [Before]
12 | override public function runBeforeEachTest() : void
13 | {
14 | super.runBeforeEachTest();
15 |
16 | _loaderName = "CSSLoader";
17 | _payloadType = StyleSheet;
18 | _payloadTypeName = "StyleSheet";
19 | _payloadPropertyName = "styleSheet";
20 | _path += "testCSS.css";
21 | _type = AssetType.CSS;
22 |
23 | _loader = new CSSLoader(new URLRequest(_path), _id);
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src_unit/org/assetloader/loaders/DisplayObjectLoaderTest.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.loaders
2 | {
3 | import org.assetloader.base.AssetType;
4 |
5 | import flash.display.DisplayObject;
6 | import flash.net.URLRequest;
7 |
8 | public class DisplayObjectLoaderTest extends BaseLoaderTest
9 | {
10 | [Before]
11 | override public function runBeforeEachTest() : void
12 | {
13 | super.runBeforeEachTest();
14 |
15 | _loaderName = "DisplayObjectLoader";
16 | _payloadType = DisplayObject;
17 | _payloadTypeName = "DisplayObject";
18 | _payloadPropertyName = "displayObject";
19 | _path += "testSWF.swf";
20 | _type = AssetType.DISPLAY_OBJECT;
21 |
22 | _loader = new DisplayObjectLoader(new URLRequest(_path), _id);
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src_unit/org/assetloader/loaders/ImageLoaderTest.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.loaders
2 | {
3 | import org.assetloader.base.AssetType;
4 |
5 | import flash.display.Bitmap;
6 | import flash.net.URLRequest;
7 |
8 | public class ImageLoaderTest extends BaseLoaderTest
9 | {
10 | [Before]
11 | override public function runBeforeEachTest() : void
12 | {
13 | super.runBeforeEachTest();
14 |
15 | _loaderName = "ImageLoader";
16 | _payloadType = Bitmap;
17 | _payloadTypeName = "Bitmap";
18 | _payloadPropertyName = "bitmap";
19 | _path += "testIMAGE.png";
20 | _type = AssetType.IMAGE;
21 |
22 | _loader = new ImageLoader(new URLRequest(_path), _id);
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src_unit/org/assetloader/loaders/JSONLoaderTest.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.loaders
2 | {
3 | import org.assetloader.base.AssetType;
4 |
5 | import flash.net.URLRequest;
6 |
7 | public class JSONLoaderTest extends BaseLoaderTest
8 | {
9 | [Before]
10 | override public function runBeforeEachTest() : void
11 | {
12 | super.runBeforeEachTest();
13 |
14 | _loaderName = "ImageLoader";
15 | _payloadType = Object;
16 | _payloadTypeName = "Object";
17 | _payloadPropertyName = "jsonObject";
18 | _path += "testJSON.json";
19 | _type = AssetType.JSON;
20 |
21 | _loader = new JSONLoader(new URLRequest(_path), _id);
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src_unit/org/assetloader/loaders/LoadersTestSuite.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.loaders
2 | {
3 | [Suite]
4 | [RunWith("org.flexunit.runners.Suite")]
5 | public class LoadersTestSuite
6 | {
7 | public var binaryLoaderTest : BinaryLoaderTest;
public var cssLoaderTest : CSSLoaderTest;
public var displayObjectLoaderTest : DisplayObjectLoaderTest;
public var imageLoaderTest : ImageLoaderTest;
public var jsonLoaderTest : JSONLoaderTest;
public var soundLoaderTest : SoundLoaderTest;
public var swfLoaderTest : SWFLoaderTest;
public var textLoaderTest : TextLoaderTest;
public var videoLoaderTest : VideoLoaderTest;
public var xmlLoaderTest : XMLLoaderTest;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src_unit/org/assetloader/loaders/SWFLoaderTest.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.loaders
2 | {
3 | import org.assetloader.base.AssetType;
4 | import org.assetloader.signals.LoaderSignal;
5 | import org.flexunit.asserts.assertEquals;
6 | import org.flexunit.asserts.assertNotNull;
7 | import org.flexunit.asserts.assertTrue;
8 | import org.osflash.signals.utils.SignalAsyncEvent;
9 | import org.osflash.signals.utils.handleSignal;
10 |
11 | import flash.display.Sprite;
12 | import flash.net.URLRequest;
13 |
14 | public class SWFLoaderTest extends BaseLoaderTest
15 | {
16 | [Before]
17 | override public function runBeforeEachTest() : void
18 | {
19 | super.runBeforeEachTest();
20 |
21 | _loaderName = "SWFLoader";
22 | _payloadType = Sprite;
23 | _payloadTypeName = "Sprite";
24 | _payloadPropertyName = "swf";
25 | _path += "testSWF.swf";
26 | _type = AssetType.SWF;
27 |
28 | _loader = new SWFLoader(new URLRequest(_path), _id);
29 | }
30 |
31 | // NON - STANDARD - LOADER - TESTS -------------------------------------------------------------------------------------------//
32 | [Test]
33 | override public function signalsReadyOnConstruction() : void
34 | {
35 | super.signalsReadyOnConstruction();
36 | assertNotNull(_loaderName + "#onInit should NOT be null after construction", SWFLoader(_loader).onInit);
37 | }
38 |
39 | [Test (async)]
40 | public function onInitSignal() : void
41 | {
42 | // Make sure that the mp3 loaded has ID3 data, otherwise this test will fail.
43 | handleSignal(this, SWFLoader(_loader).onInit, onInit_handler);
44 | _loader.start();
45 | }
46 |
47 | protected function onInit_handler(event : SignalAsyncEvent, data : Object) : void
48 | {
49 | var values : Array = event.args;
50 | assertTrue("Argument 1 should be LoaderSignal", (values[0] is LoaderSignal));
51 |
52 | var signal : LoaderSignal = values[0];
53 | assertNotNull("LoaderSignal#loader should NOT be null", signal.loader);
54 | }
55 |
56 | override protected function assertPostDestroy() : void
57 | {
58 | super.assertPostDestroy();
59 | assertEquals(_loaderName + "#onInit#numListeners should be equal to 0", SWFLoader(_loader).onInit.numListeners, 0);
60 | }
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/src_unit/org/assetloader/loaders/SoundLoaderTest.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.loaders
2 | {
3 | import org.assetloader.base.AssetType;
4 | import org.assetloader.signals.LoaderSignal;
5 | import org.flexunit.asserts.assertEquals;
6 | import org.flexunit.asserts.assertNotNull;
7 | import org.flexunit.asserts.assertTrue;
8 | import org.osflash.signals.utils.SignalAsyncEvent;
9 | import org.osflash.signals.utils.failOnSignal;
10 | import org.osflash.signals.utils.handleSignal;
11 |
12 | import flash.media.Sound;
13 | import flash.net.URLRequest;
14 |
15 | public class SoundLoaderTest extends BaseLoaderTest
16 | {
17 | [Before]
18 | override public function runBeforeEachTest() : void
19 | {
20 | super.runBeforeEachTest();
21 |
22 | _loaderName = "SoundLoader";
23 | _payloadType = Sound;
24 | _payloadTypeName = "Sound";
25 | _payloadPropertyName = "sound";
26 | _path += "testSOUND.mp3";
27 | _type = AssetType.SOUND;
28 |
29 | _loader = new SoundLoader(new URLRequest(_path), _id);
30 | }
31 |
32 | // NON - STANDARD - LOADER - TESTS -------------------------------------------------------------------------------------------//
33 | [Test]
34 | override public function signalsReadyOnConstruction() : void
35 | {
36 | super.signalsReadyOnConstruction();
37 | assertNotNull(_loaderName + "#onReady should NOT be null after construction", SoundLoader(_loader).onId3);
38 | assertNotNull(_loaderName + "#onId3 should NOT be null after construction", SoundLoader(_loader).onReady );
39 | }
40 |
41 | [Test (async)]
42 | public function onId3Signal() : void
43 | {
44 | // Make sure that the mp3 loaded has ID3 data, otherwise this test will fail.
45 | handleSignal(this, SoundLoader(_loader).onId3, onId3_handler);
46 | _loader.start();
47 | }
48 |
49 | protected function onId3_handler(event : SignalAsyncEvent, data : Object) : void
50 | {
51 | var values : Array = event.args;
52 | assertTrue("Argument 1 should be LoaderSignal", (values[0] is LoaderSignal));
53 |
54 | var signal : LoaderSignal = values[0];
55 | assertNotNull("LoaderSignal#loader should NOT be null", signal.loader);
56 | }
57 |
58 | [Test (async)]
59 | public function onReadySignal() : void
60 | {
61 | handleSignal(this, SoundLoader(_loader).onReady, onReady_handler);
62 | _loader.start();
63 | }
64 |
65 | protected function onReady_handler(event : SignalAsyncEvent, data : Object) : void
66 | {
67 | var values : Array = event.args;
68 | assertTrue("Argument 1 should be LoaderSignal", (values[0] is LoaderSignal));
69 | assertTrue("Argument 2 should be Sound", (values[1] is Sound));
70 |
71 | var signal : LoaderSignal = values[0];
72 | assertNotNull("LoaderSignal#loader should NOT be null", signal.loader);
73 |
74 | assertTrue(_loaderName + "#isReady should be true", SoundLoader(_loader).isReady);
75 | }
76 |
77 | override protected function assertPostDestroy() : void
78 | {
79 | super.assertPostDestroy();
80 | assertEquals(_loaderName + "#onId3#numListeners should be equal to 0", SoundLoader(_loader).onId3.numListeners, 0);
81 | assertEquals(_loaderName + "#onReady#numListeners should be equal to 0", SoundLoader(_loader).onReady.numListeners, 0);
82 | }
83 |
84 | // SOUND LOADER DOES NOT DISPATCH HTTP STATUS SIGNAL
85 | [Test (async)]
86 | override public function onHttpStatusSignal() : void
87 | {
88 | failOnSignal(this, _loader.onHttpStatus);
89 | _loader.start();
90 | }
91 |
92 | [Test (async)]
93 | override public function stop() : void
94 | {
95 | super.stop();
96 | failOnSignal(this, SoundLoader(_loader).onId3);
97 | }
98 | }
99 | }
100 |
--------------------------------------------------------------------------------
/src_unit/org/assetloader/loaders/TextLoaderTest.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.loaders
2 | {
3 | import org.assetloader.base.AssetType;
4 |
5 | import flash.net.URLRequest;
6 |
7 | public class TextLoaderTest extends BaseLoaderTest
8 | {
9 | [Before]
10 | override public function runBeforeEachTest() : void
11 | {
12 | super.runBeforeEachTest();
13 |
14 | _loaderName = "TextLoader";
15 | _payloadType = String;
16 | _payloadTypeName = "String";
17 | _payloadPropertyName = "text";
18 | _path += "testTXT.txt";
19 | _type = AssetType.TEXT;
20 |
21 | _loader = new TextLoader(new URLRequest(_path), _id);
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src_unit/org/assetloader/loaders/VideoLoaderTest.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.loaders
2 | {
3 | import org.assetloader.base.AssetType;
4 | import org.assetloader.signals.LoaderSignal;
5 | import org.assetloader.signals.NetStatusSignal;
6 | import org.flexunit.asserts.assertEquals;
7 | import org.flexunit.asserts.assertNotNull;
8 | import org.flexunit.asserts.assertTrue;
9 | import org.osflash.signals.utils.SignalAsyncEvent;
10 | import org.osflash.signals.utils.failOnSignal;
11 | import org.osflash.signals.utils.handleSignal;
12 |
13 | import flash.net.NetStream;
14 | import flash.net.URLRequest;
15 |
16 | public class VideoLoaderTest extends BaseLoaderTest
17 | {
18 | [Before]
19 | override public function runBeforeEachTest() : void
20 | {
21 | super.runBeforeEachTest();
22 |
23 | _loaderName = "VideoLoader";
24 | _payloadType = NetStream;
25 | _payloadTypeName = "NetStream";
26 | _payloadPropertyName = "netStream";
27 | // Make sure video is an FLV, flash player does not allow local loading of mp4 file format.
28 | _path += "testVIDEO.flv";
29 | _type = AssetType.VIDEO;
30 |
31 | _loader = new VideoLoader(new URLRequest(_path), _id);
32 | }
33 |
34 | // NON - STANDARD - LOADER - TESTS -------------------------------------------------------------------------------------------//
35 | [Test]
36 | override public function signalsReadyOnConstruction() : void
37 | {
38 | assertNotNull(_loaderName + "#onNetStatus should NOT be null after construction", VideoLoader(_loader).onNetStatus);
39 | assertNotNull(_loaderName + "#onReady should NOT be null after construction", VideoLoader(_loader).onReady);
40 | assertNotNull(_loaderName + "#onMetaData should NOT be null after construction", VideoLoader(_loader).onMetaData);
41 | }
42 |
43 | [Test (async)]
44 | public function onNetStatusSignal() : void
45 | {
46 | handleSignal(this, VideoLoader(_loader).onNetStatus, onNetStatus_handler);
47 | _loader.start();
48 | }
49 |
50 | protected function onNetStatus_handler(event : SignalAsyncEvent, data : Object) : void
51 | {
52 | var values : Array = event.args;
53 | assertTrue("Argument 1 should be LoaderSignal", (values[0] is NetStatusSignal));
54 |
55 | var signal : NetStatusSignal = values[0];
56 | assertNotNull("NetStatusSignal#loader should NOT be null", signal.loader);
57 | assertNotNull("NetStatusSignal#info should NOT be null", signal.info);
58 | }
59 |
60 | [Test (async)]
61 | public function onReadySignal() : void
62 | {
63 | handleSignal(this, VideoLoader(_loader).onReady, onReady_handler);
64 | _loader.start();
65 | }
66 |
67 | protected function onReady_handler(event : SignalAsyncEvent, data : Object) : void
68 | {
69 | var values : Array = event.args;
70 | assertTrue("Argument 1 should be LoaderSignal", (values[0] is LoaderSignal));
71 | assertTrue("Argument 2 should be NetStream", values[1] is NetStream);
72 |
73 | var signal : LoaderSignal = values[0];
74 | assertNotNull("LoaderSignal#loader should NOT be null", signal.loader);
75 |
76 |
77 | assertTrue(_loaderName + "#isReady should be true", VideoLoader(_loader).isReady);
78 | }
79 |
80 | [Test (async)]
81 | public function onMetaDataSignal() : void
82 | {
83 | handleSignal(this, VideoLoader(_loader).onMetaData, onMetaData_handler);
84 | _loader.start();
85 | }
86 |
87 | protected function onMetaData_handler(event : SignalAsyncEvent, data : Object) : void
88 | {
89 | var values : Array = event.args;
90 | assertTrue("Argument 1 should be LoaderSignal", (values[0] is LoaderSignal));
91 | assertTrue("Argument 2 should be Object", values[1] is Object);
92 |
93 | var signal : LoaderSignal = values[0];
94 | assertNotNull("LoaderSignal#loader should NOT be null", signal.loader);
95 |
96 | }
97 |
98 | override protected function assertPostDestroy() : void
99 | {
100 | super.assertPostDestroy();
101 | assertEquals(_loaderName + "#onNetStatus#numListeners should be equal to 0", VideoLoader(_loader).onNetStatus.numListeners, 0);
102 | assertEquals(_loaderName + "#onReady#numListeners should be equal to 0", VideoLoader(_loader).onReady.numListeners, 0);
103 | }
104 |
105 | // VIDEO LOADER DOES NOT DISPATCH HTTP STATUS SIGNAL
106 | [Test (async)]
107 | override public function onHttpStatusSignal() : void
108 | {
109 | failOnSignal(this, _loader.onHttpStatus);
110 | _loader.start();
111 | }
112 |
113 | [Test (async)]
114 | override public function stop() : void
115 | {
116 | super.stop();
117 | failOnSignal(this, VideoLoader(_loader).onNetStatus);
failOnSignal(this, VideoLoader(_loader).onReady);
118 | }
119 | }
120 | }
121 |
--------------------------------------------------------------------------------
/src_unit/org/assetloader/loaders/XMLLoaderTest.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.loaders
2 | {
3 | import org.assetloader.base.AssetType;
4 |
5 | import flash.net.URLRequest;
6 |
7 | public class XMLLoaderTest extends BaseLoaderTest
8 | {
9 | [Before]
10 | override public function runBeforeEachTest() : void
11 | {
12 | super.runBeforeEachTest();
13 |
14 | _loaderName = "XMLLoader";
15 | _payloadType = XML;
16 | _payloadTypeName = "XML";
17 | _payloadPropertyName = "xml";
18 | _path += "testXML.xml";
19 | _type = AssetType.XML;
20 |
21 | _loader = new XMLLoader(new URLRequest(_path), _id);
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src_unit/org/assetloader/parsers/ParsersTestSuite.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.parsers
2 | {
3 |
4 | [Suite]
5 | [RunWith("org.flexunit.runners.Suite")]
6 | public class ParsersTestSuite
7 | {
8 | public var xmlConfigParserTest : XmlConfigParserTest;
public var urlParserTest : URLParserTest;
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/src_unit/org/assetloader/utils/InspectorTest.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.utils
2 | {
3 | import org.assetloader.loaders.SWFLoader;
4 | import org.flexunit.asserts.assertEquals;
5 | import org.flexunit.asserts.assertNotNull;
6 | import org.flexunit.asserts.assertNull;
7 | import org.flexunit.asserts.assertTrue;
8 | import org.osflash.signals.utils.SignalAsyncEvent;
9 | import org.osflash.signals.utils.handleSignal;
10 |
11 | import flash.display.Bitmap;
12 | import flash.display.BitmapData;
13 | import flash.display.MovieClip;
14 | import flash.display.Sprite;
15 | import flash.media.Sound;
16 | import flash.net.URLRequest;
17 | import flash.text.Font;
18 |
19 | public class InspectorTest
20 | {
21 | protected var _loader : SWFLoader;
22 | protected var _inspector : Inspector;
23 | protected var _basePackage : String = "org.assetloader.assets";
24 |
25 | [BeforeClass]
26 | public static function runBeforeEntireSuite() : void
27 | {
28 | }
29 |
30 | [AfterClass]
31 | public static function runAfterEntireSuite() : void
32 | {
33 | }
34 |
35 | [Before(async)]
36 | public function runBeforeEachTest() : void
37 | {
38 | _loader = new SWFLoader(new URLRequest("assets/InspectorTestAssets.swf"));
39 | handleSignal(this, _loader.onComplete, loader_onComplete_handler);
40 | _loader.start();
41 | }
42 |
43 | protected function loader_onComplete_handler(event : SignalAsyncEvent, data : Object) : void
44 | {
45 | _inspector = new Inspector(_loader.data);
46 | _inspector.basePackage = _basePackage;
47 | }
48 |
49 | [After]
50 | public function runAfterEachTest() : void
51 | {
52 | _loader.destroy();
53 | _loader = null;
54 | }
55 |
56 | [Test]
57 | public function retainsBasePackage() : void
58 | {
59 | assertEquals("Should retain #basePackage", _basePackage, _inspector.basePackage);
60 | }
61 |
62 | [Test]
63 | public function getClass() : void
64 | {
65 | var data : * = _inspector.getClass("FontAsset");
66 | assertNotNull(_basePackage + ".FontAsset should not be null.", data);
67 | assertTrue(_basePackage + ".FontAsset should be of type Class.", data is Class);
68 | }
69 |
70 | [Test]
71 | public function getClassInvalid() : void
72 | {
73 | var data : * = _inspector.getClass("asset.FontAsset");
74 | assertNull(_basePackage + "assets.FontAsset should be null.", data);
75 | }
76 |
77 | [Test]
78 | public function getClassOverride() : void
79 | {
80 | var data : * = _inspector.getClass("DoesFlashAsset", "com.doesflash.assets");
81 | assertNotNull("com.doesflash.assets.DoesFlashAsset should not be null.", data);
82 | assertTrue("com.doesflash.assets.DoesFlashAsset should be of type Sprite.", data is Class);
83 | }
84 |
85 | [Test]
86 | public function getClassInvalidOverride() : void
87 | {
88 | var data : * = _inspector.getClass("assets.DoesFlashAsset", "com.doesflash.assets");
89 | assertNull("com.doesflash.assets.DoesFlashAsset should be null.", data);
90 | }
91 |
92 | [Test]
93 | public function getSprite() : void
94 | {
95 | var data : * = _inspector.getSprite("SpriteAsset");
96 | assertNotNull(_basePackage + ".SpriteAsset should not be null.", data);
97 | assertTrue(_basePackage + ".SpriteAsset should be of type Sprite.", data is Sprite);
98 | }
99 |
100 | [Test]
101 | public function getMovieClip() : void
102 | {
103 | var data : * = _inspector.getMovieClip("MovieClipAsset");
104 | assertNotNull(_basePackage + ".MovieClipAsset should not be null.", data);
105 | assertTrue(_basePackage + ".MovieClipAsset should be of type MovieClip.", data is MovieClip);
106 | }
107 |
108 | [Test]
109 | public function getFont() : void
110 | {
111 | var data : * = _inspector.getFont("FontAsset");
112 | assertNotNull(_basePackage + ".FontAsset should not be null.", data);
113 | assertTrue(_basePackage + ".FontAsset should be of type Font.", data is Font);
114 | }
115 |
116 | [Test]
117 | public function getSound() : void
118 | {
119 | var data : * = _inspector.getSound("SoundAsset");
120 | assertNotNull(_basePackage + ".SoundAsset should not be null.", data);
121 | assertTrue(_basePackage + ".SoundAsset should be of type Sound.", data is Sound);
122 | }
123 |
124 | [Test]
125 | public function getBitmapData() : void
126 | {
127 | var data : * = _inspector.getBitmapData("BitmapDataAsset");
128 | assertNotNull(_basePackage + ".BitmapDataAsset should not be null.", data);
129 | assertTrue(_basePackage + ".BitmapDataAsset should be of type BitmapData.", data is BitmapData);
130 | }
131 |
132 | [Test]
133 | public function getBitmap() : void
134 | {
135 | var data : * = _inspector.getBitmap("BitmapDataAsset");
136 | assertNotNull(_basePackage + ".BitmapDataAsset should not be null.", data);
137 | assertTrue(_basePackage + ".BitmapDataAsset should be of type Bitmap.", data is Bitmap);
138 | }
139 | }
140 | }
141 |
--------------------------------------------------------------------------------
/src_unit/org/assetloader/utils/UtilsTestSuite.as:
--------------------------------------------------------------------------------
1 | package org.assetloader.utils
2 | {
3 |
4 | [Suite]
5 | [RunWith("org.flexunit.runners.Suite")]
6 | public class UtilsTestSuite
7 | {
8 | public var inspectorTest : InspectorTest;
9 | }
10 | }
11 |
--------------------------------------------------------------------------------