<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>WS-Blog &#187; Debugging</title>
	<atom:link href="http://www.websector.de/blog/category/flash/debugging/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.websector.de/blog</link>
	<description>// Flex - AIR - Flash - JavaScript</description>
	<lastBuildDate>Wed, 18 Jan 2012 12:17:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>WSPluginSwitcher: Cocoa based tool for switching Flash plug-in on OS X</title>
		<link>http://www.websector.de/blog/2009/01/02/wspluginswitcher-cocoa-based-tool-for-switching-flash-plug-in-on-os-x/</link>
		<comments>http://www.websector.de/blog/2009/01/02/wspluginswitcher-cocoa-based-tool-for-switching-flash-plug-in-on-os-x/#comments</comments>
		<pubDate>Fri, 02 Jan 2009 15:54:12 +0000</pubDate>
		<dc:creator>sectore</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://www.websector.de/blog/?p=104</guid>
		<description><![CDATA[It&#8217;s never to late to learn a new (programming) language So I&#8217;ve been starting to learn Cocoa, Apple&#8217;s Objective-C based programming environment for Mac OS X. My &#8220;Cocoa&#8221;-trip started with building a little application called &#8220;WSPluginSwitcher&#8220;, which is a Cocoa based tool for switching Flash plug-ins on OS X (Leopard). Check it out &#8211; it&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/p/wspluginswitcher/" class="img"><br />
<img src="http://www.websector.de/blog/wp-content/uploads/2009/01/02/logo450x76.png" width="450" height="76"  /></a></p>
<p>It&#8217;s never to late to learn a new (programming) language <img src='http://www.websector.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  So I&#8217;ve been starting to learn <a href="http://developer.apple.com/cocoa/ ">Cocoa</a>, Apple&#8217;s Objective-C based programming environment for Mac OS X. </p>
<p>My &#8220;Cocoa&#8221;-trip started with building a little application called &#8220;<a href="http://code.google.com/p/wspluginswitcher/">WSPluginSwitcher</a>&#8220;, which is a Cocoa based tool for switching Flash plug-ins on OS X (Leopard). </p>
<p><span id="more-104"></span></p>
<p>Check it out &#8211; it&#8217;s open source, including its source code: <a href="http://code.google.com/p/wspluginswitcher/">WSPluginSwitcher on Google Code</a></p>
<h2>Screen shots</h2>
<p><a href="http://code.google.com/p/wspluginswitcher/" class="img"><img src="http://www.websector.de/blog/wp-content/uploads/2009/01/02/WSPluginSwitcher_mainWindow.png" width="328" height="390"  /></a></p>
<p><a href="http://code.google.com/p/wspluginswitcher/" class="img"><img src="http://www.websector.de/blog/wp-content/uploads/2009/01/02/WSPluginSwitcher_prefsWindow.png" width="352" height="303"  /></a></p>
<p><a href="http://code.google.com/p/wspluginswitcher/" class="img"><img src="http://www.websector.de/blog/wp-content/uploads/2009/01/02/WSPluginSwitcher_desktopIcon.png" width="510" height="217"  /></a></p>
<h2>Download WSPluginSwitcher including full source</h2>
<p>You can download WSPluginSwitcher at its <a href="http://code.google.com/p/wspluginswitcher/">Google Code project</a>.</p>
<p>To get the full source checkout the latest code using <a href="http://code.google.com/p/wspluginswitcher/source/checkout">WSPluginSwitchers repository</a> at Google Code. </p>
<p>It&#8217;s open source!</p>
<p>BTW: I&#8217;m very new to Cocoa, so I&#8217;m very happy about any feedback <img src='http://www.websector.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h2>Helpful links for learning Cocoa as an ActionScript Developer</h2>
<p>About 10 days of programming a new language is not enough to make a real statement&#8230; However, what I&#8217;ve have learned so far is: <strong>To learn Cocoa as quick as possible you will need a good book!</strong> Apple delivers <a href="http://developer.apple.com/documentation/Cocoa/index.html">tons of Cocoa guides</a>, but it takes me (too) much time to find basic solutions. I know why I love Adobes Flex and AIR docs <img src='http://www.websector.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  </p>
<p>So I highly recommend the book called <a href="http://www.amazon.com/Cocoa-Programming-Mac-OS-3rd/dp/0321503619/">&#8220;Cocoa Programming for Max OS X&#8221; by Aaron Hillegass</a>, which helps me a lot!</p>
<p>Further helpful links (not only for ActionScript Developers) are:</p>
<ul>
<li><a href="http://cocoadevcentral.com/">Cocoa Dev Central</a>: <a href="http://cocoadevcentral.com/">Learn Cocoa</a></li>
<li><a href="http://theocacao.com/">Theocacao</a>: <a href="http://theocacao.com/document.page/510">A Quick Objective-C 2.0 Tutorial</a></li>
<li><a href="http://andyj.be/blog/">Andy Jacobs</a>: &#8220;<a href="http://andyj.be/blog/?p=3">Cocoa touch for actionscript developers (basics)</a>&#8220;, &#8220;<a href="http://andyj.be/blog/?p=25">AS3 to Cocoa Touch: Array’s</a>&#8220;, &#8220;<a href="http://andyj.be/blog/?p=37">AS3 to Cocoa touch: XML</a>&#8220;, &#8220;<a href="http://andyj.be/blog/?p=52">AS3 to Cocoa touch: JSON (Part 1)</a>&#8221;
<li><a href="http://www.bit-101.com/blog/">Keith Peters:</a> Gravity Tutorials for iPhone <a href="http://www.bit-101.com/blog/?p=1784">Part 1</a>, <a href="http://www.bit-101.com/blog/?p=1793">Part 2</a>, <a href="http://www.bit-101.com/blog/?p=1798">Part 3</a>, <a href="http://www.bit-101.com/blog/?p=1812">Part 4</a>, <a href="http://www.bit-101.com/blog/?p=1824">Part 5</a></li>
</ul>
<p>P.S.: Happy Flash plug-in switching using WSPluginSwitcher! <img src='http://www.websector.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.websector.de/blog/2009/01/02/wspluginswitcher-cocoa-based-tool-for-switching-flash-plug-in-on-os-x/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>The new ThunderBolt AS3 Console based on Adobe AIR</title>
		<link>http://www.websector.de/blog/2008/06/01/the-new-thunderbolt-as3-console-based-on-adobe-air/</link>
		<comments>http://www.websector.de/blog/2008/06/01/the-new-thunderbolt-as3-console-based-on-adobe-air/#comments</comments>
		<pubDate>Sun, 01 Jun 2008 17:23:00 +0000</pubDate>
		<dc:creator>sectore</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[ThunderBolt]]></category>

		<guid isPermaLink="false">http://www.websector.de/blog/2008/06/01/the-new-thunderbolt-as3-console-based-on-adobe-air/</guid>
		<description><![CDATA[ThunderBolt AS3 is a lightweight logger extension for Flex or Flash application using Firebug. With its new tool called ThunderBolt AS3 Console, which based on Adobe AIR, it&#8217;s independent on Firebug. That&#8217;s incredible helpful for logging AIR applications using ThunderBolt AS3. Screen shots 
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_ws-slideshow_2035805095"
			class="flashmovie"
			width="500"
			height="400">
	<param name="movie" value="http://www.websector.de/blog/wp-includes/swf/ws-slideshow.swf" />
	<param name="flashvars" value="XMLPath=http://www.websector.de/blog/wp-content/uploads/2008/06/01/screenshots.xml&amp;langID=EN" />
	<param name="menu" value="false" />
	<param name="bgcolor" value="#FFFFFF" />
	<param name="allowscriptaccess" value="sameDomain" />
	<param name="allowfullscreen" value="true" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://www.websector.de/blog/wp-includes/swf/ws-slideshow.swf"
			name="fm_ws-slideshow_2035805095"
			width="500"
			height="400">
		<param name="flashvars" value="XMLPath=http://www.websector.de/blog/wp-content/uploads/2008/06/01/screenshots.xml&amp;langID=EN" />
		<param name="menu" value="false" />
		<param name="bgcolor" value="#FFFFFF" />
		<param name="allowscriptaccess" value="sameDomain" />
		<param name="allowfullscreen" value="true" />
	<!--<![endif]-->
		 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/p/flash-thunderbolt/wiki/ThunderBoltAS3">ThunderBolt AS3</a> is a lightweight logger extension for Flex or Flash application using <a href="http://www.firebug.org">Firebug</a>. With its new tool called <a href="http://code.google.com/p/flash-thunderbolt/wiki/ThunderBoltAS3Console">ThunderBolt AS3 Console</a>, which based on <a href="http://www.adobe.com/products/air/">Adobe AIR</a>, it&#8217;s independent on Firebug. That&#8217;s incredible helpful for logging AIR applications using ThunderBolt AS3.</p>
<p><span id="more-50"></span></p>
<h2>Screen shots</h2>
<p>[kml_flashembed publishmethod="dynamic" fversion="9.0.28" movie="http://www.websector.de/blog/wp-includes/swf/ws-slideshow.swf" width="500" height="400" targetclass="flashmovie" menu="false" bgcolor="#FFFFFF" allowfullscreen="true" allowscriptaccess="sameDomain" fvars="XMLPath=http://www.websector.de/blog/wp-content/uploads/2008/06/01/screenshots.xml;langID=EN"]</a><br />

	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p><!-- #START screenshots --></p>
<h2>Behind the scenes</h2>
<p>For logging without Firebug, ThunderBolt AS3 uses the well-known <code>trace()</code> method in a special manner, which are stored in the <a href="http://livedocs.adobe.com/flex/3/html/logging_04.html">flashlog.txt</a>. ThunderBolt AS3 Console reads this file and displays all information using different log views in a same way as Firebug it does.</p>
<p>The architecture behind this AIR application based on <a href="http://www.tombray.com/category/easymvc/">Tom Bray&#8217;s easyMVC concept</a>, which helps to build a well structured application as quick as possible using the MVC pattern.</p>
<p>ThunderBolt AS3 Console uses the following libraries as well:</p>
<ul>
<li><a href="http://developer.yahoo.com/yui/treeview/">Yahoo! UI Library TreeView</a> for the logging tree. It&#8217;s great to use this library within <a href="http://livedocs.adobe.com/flex/3/langref/mx/controls/HTML.html">the AIR based HTML component</a> for manipulating the HTML DOM using pure ActionScript <img src='http://www.websector.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  .</li>
<li>The awesome <a href="http://www.degrafa.com/">Degrafa</a> library for all the skinning stuff.</li>
</ul>
<h2>Full source available</h2>
<p>Download the <a href="http://code.google.com/p/flash-thunderbolt/downloads/list">ThunderBolt AS3 Console at Google Code</a> or check out the full source using <a href="http://flash-thunderbolt.googlecode.com/svn/trunk/as3console/">its repository</a>.</p>
<h2>Wiki pages at Google Code</h2>
<ul>
<li><a href="http://code.google.com/p/flash-thunderbolt/wiki/ThunderBoltAS3">ThunderBolt AS3 project page</a></li>
<li><a href="http://code.google.com/p/flash-thunderbolt/wiki/ThunderBoltAS3Console">ThunderBolt AS3 Console</a></li>
</ul>
<p>Happy logging! <img src='http://www.websector.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.websector.de/blog/2008/06/01/the-new-thunderbolt-as3-console-based-on-adobe-air/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>AsUnit (AS3): RemoteTestCase for testing asynchronous data using Flash Remoting</title>
		<link>http://www.websector.de/blog/2007/11/29/asunit-as3-remotetestcase-for-testing-asynchronous-data-using-flash-remoting/</link>
		<comments>http://www.websector.de/blog/2007/11/29/asunit-as3-remotetestcase-for-testing-asynchronous-data-using-flash-remoting/#comments</comments>
		<pubDate>Thu, 29 Nov 2007 13:09:00 +0000</pubDate>
		<dc:creator>sectore</dc:creator>
				<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://www.websector.de/blog/2007/11/29/asunit-as3-remotetestcase-for-testing-asynchronous-data-using-flash-remoting/</guid>
		<description><![CDATA[UPDATE 12/05/07: Luke Bayes has added the RemotingTestCase to AsUnits repository. Thanks Luke! AsUnit is the first choice for Test-Driven Development using pure Flash applications. However, currently you find only one test case for asynchronous data using an instance of the flash.net.URLLoader class, but it seems neither for calling methods based on Flash Remoting using [...]]]></description>
			<content:encoded><![CDATA[<p style="background-color:#F6F6F6;"><strong>UPDATE 12/05/07:</strong> <a href="http://www.asserttrue.com/">Luke Bayes</a> has added the <code>RemotingTestCase</code> to <a href="http://asunit.svn.sourceforge.net/viewvc/asunit/">AsUnits repository</a>. Thanks Luke!</p>
<p><a href="http://www.asunit.org/">AsUnit</a> is the first choice for <a href="http://en.wikipedia.org/wiki/Test-driven_development">Test-Driven Development</a> using pure Flash applications. However, currently you find only one test case for asynchronous data using an instance of the <code>flash.net.URLLoader</code> class, but it seems neither for calling methods based on <a href="http://www.adobe.com/products/flashremoting/">Flash Remoting</a> using the <code>flash.net.NetConnection</code> class. So I decided to add a new test case called <code>asunit.framework.RemotingTestCase</code>&#8221; to the AsUnit Framework and hope it would be helpful for the community &#8211; check it out <img src='http://www.websector.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><span id="more-41"></span></p>
<h2>Examples</h2>
<p>Successfully asynchronous tests</p>
<p><img src="http://www.websector.de/blog/wp-content/uploads/2007/11/29/AsUnitTestSuccessfull.png" width="500" height="300" />
<p>Unsuccessfully asynchronous tests</p>
<p><img src="http://www.websector.de/blog/wp-content/uploads/2007/11/29/AsUnitTestUnSuccessfull.png" width="500" height="300" /><br />
<h2>Source</h2>
<p>For more information check out the comments within the code, too <img src='http://www.websector.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<div class="codeHeadlineBox">
<p>asunit.framework.RemotingTestCase ( <a href="http://www.websector.de/blog/wp-content/uploads/2007/11/29/RemotingTestCase.as">Download code</a> )</p>
</div>
<div class="actionscript" style="font-family: monospace;">
<ol>
<li class="li1">
<div class="de1">package asunit.<span class="me1">framework</span> </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">errors</span>.<span class="me1">IllegalOperationError</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">events</span>.<span class="me1">IOErrorEvent</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">events</span>.<span class="me1">NetStatusEvent</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">events</span>.<span class="me1">SecurityErrorEvent</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">net</span>.<span class="kw3">NetConnection</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">net</span>.<span class="me1">ObjectEncoding</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">net</span>.<span class="me1">Responder</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">import</span> asunit.<span class="me1">framework</span>.<span class="me1">TestCase</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">import</span> asunit.<span class="me1">util</span>.<span class="me1">ArrayIterator</span>;&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp;&nbsp; * RemotingTestCase </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp;&nbsp; * @author &nbsp;Jens Krause [www.websector.de]</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp;&nbsp; * @date &nbsp; &nbsp;11/29/07</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp;&nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp;&nbsp; */</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">class</span> RemotingTestCase <span class="kw3">extends</span> TestCase </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; protected <span class="kw2">var</span> connection: <span class="kw3">NetConnection</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * Constructor</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * @param testMethod&nbsp;&nbsp;String&nbsp; &nbsp;&nbsp; &nbsp;Name of the test case</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; */</span>&nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> RemotingTestCase<span class="br0">&#40;</span>testMethod: <span class="kw3">String</span> = <span class="kw2">null</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">super</span><span class="br0">&#40;</span>testMethod<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * Inits a netConnection instance and add all necessary event listeners</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; */</span>&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; protected <span class="kw2">function</span> initConnection<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>connection == <span class="kw2">null</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; connection = <span class="kw2">new</span> <span class="kw3">NetConnection</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; connection.<span class="me1">addEventListener</span><span class="br0">&#40;</span>NetStatusEvent.<span class="me1">NET_STATUS</span>, connectionStatusHandler<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; connection.<span class="me1">addEventListener</span><span class="br0">&#40;</span>IOErrorEvent.<span class="me1">IO_ERROR</span>, connectionIOErrorHandler<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; connection.<span class="me1">addEventListener</span><span class="br0">&#40;</span>SecurityErrorEvent.<span class="me1">SECURITY_ERROR</span> , connectionSecurityErrorHandler<span class="br0">&#41;</span>;&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * Dispose the netConnection instance</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; */</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; protected <span class="kw2">function</span> disposeConnection<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>connection != <span class="kw2">null</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; connection.<span class="me1">removeEventListener</span><span class="br0">&#40;</span>NetStatusEvent.<span class="me1">NET_STATUS</span>, connectionStatusHandler<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; connection.<span class="me1">removeEventListener</span><span class="br0">&#40;</span>IOErrorEvent.<span class="me1">IO_ERROR</span>, connectionIOErrorHandler<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; connection.<span class="me1">removeEventListener</span><span class="br0">&#40;</span>SecurityErrorEvent.<span class="me1">SECURITY_ERROR</span> , connectionSecurityErrorHandler<span class="br0">&#41;</span>;&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; connection = <span class="kw2">null</span>;&nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * Callback handler for receiving SecurityErrorEvent</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * @param event&nbsp; &nbsp; SecurityErrorEvent</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; */</span>&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; protected <span class="kw2">function</span> connectionSecurityErrorHandler<span class="br0">&#40;</span>event: SecurityErrorEvent<span class="br0">&#41;</span>: <span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result.<span class="me1">addError</span><span class="br0">&#40;</span><span class="kw3">this</span>, <span class="kw2">new</span> IllegalOperationError<span class="br0">&#40;</span>event.<span class="kw3">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isComplete = <span class="kw2">true</span>;&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * Callback handler for receiving IOErrorEvent</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * @param event&nbsp; &nbsp; IOErrorEvent</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; */</span>&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; protected <span class="kw2">function</span> connectionIOErrorHandler<span class="br0">&#40;</span>event: IOErrorEvent<span class="br0">&#41;</span>: <span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result.<span class="me1">addError</span><span class="br0">&#40;</span><span class="kw3">this</span>, <span class="kw2">new</span> IllegalOperationError<span class="br0">&#40;</span>event.<span class="kw3">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isComplete = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * Callback handler for receiving NetStatusEvent</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * @param event&nbsp; &nbsp; NetStatusEvent</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; */</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; protected <span class="kw2">function</span> connectionStatusHandler<span class="br0">&#40;</span>event: NetStatusEvent<span class="br0">&#41;</span>: <span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * Connects the gateway</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * @param $gateway&nbsp; &nbsp;&nbsp; &nbsp;String&nbsp;&nbsp;Remote gateway</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * @param $encoding&nbsp; &nbsp; uint&nbsp; &nbsp; Object encoding using either AMF0 or AMF3</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; */</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; protected <span class="kw2">function</span> <span class="kw3">connect</span> <span class="br0">&#40;</span>$gateway: <span class="kw3">String</span> = <span class="kw2">null</span>, $encoding: uint = <span class="nu0">0</span><span class="br0">&#41;</span>: <span class="kw3">void</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; initConnection<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;connection.<span class="me1">objectEncoding</span> = <span class="br0">&#40;</span>$encoding &gt; ObjectEncoding.<span class="me1">AMF0</span><span class="br0">&#41;</span> ? $encoding : ObjectEncoding.<span class="me1">AMF0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;<span class="kw3">try</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;connection.<span class="kw3">connect</span><span class="br0">&#40;</span>$gateway<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;<span class="kw3">catch</span><span class="br0">&#40;</span><span class="kw3">error</span>: <span class="kw3">Error</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;result.<span class="me1">addError</span><span class="br0">&#40;</span><span class="kw3">this</span>, <span class="kw3">error</span><span class="br0">&#41;</span>;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * Calls a remote service method and test it </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * @param $method&nbsp; &nbsp; &nbsp; &nbsp; String&nbsp; &nbsp; Remote service</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * @param $responder&nbsp;&nbsp;Responder&nbsp; &nbsp; Responder to handle remoting calls</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * @param $arguments&nbsp;&nbsp;Array&nbsp; &nbsp; &nbsp; &nbsp; Rest paramaters (optional) </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; */</span>&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; protected <span class="kw2">function</span> <span class="kw3">call</span> <span class="br0">&#40;</span>$method: <span class="kw3">String</span> = <span class="kw2">null</span>, $responder: Responder = <span class="kw2">null</span>, &#8230;$arguments<span class="br0">&#41;</span>: <span class="kw3">void</span>&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> hasReferenceError: <span class="kw3">Boolean</span> = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// parameters for calling connection.call();</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// To avoid using the type unsafe &#8230;rest operator I decided to use type safe parameters within RemotingTestCase.call() </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// and apply these later to connection.call();</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> params: <span class="kw3">Array</span> = <span class="br0">&#91;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// check remote method </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>$method != <span class="kw2">null</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; params.<span class="kw3">push</span><span class="br0">&#40;</span>$method<span class="br0">&#41;</span>;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result.<span class="me1">addError</span><span class="br0">&#40;</span><span class="kw3">this</span>, <span class="kw2">new</span> ReferenceError<span class="br0">&#40;</span><span class="st0">&quot;RemotingTestCase.call() has to defined a remote method.&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hasReferenceError = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// check responder</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>$responder != <span class="kw2">null</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; params.<span class="kw3">push</span><span class="br0">&#40;</span>$responder<span class="br0">&#41;</span>;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result.<span class="me1">addError</span><span class="br0">&#40;</span><span class="kw3">this</span>, <span class="kw2">new</span> ReferenceError<span class="br0">&#40;</span><span class="st0">&quot;RemotingTestCase.call() has to defined a responder to handling its results.&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hasReferenceError = <span class="kw2">true</span>;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// In case of a reference error invoke test running instantly </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// to show the errors created above and return</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>hasReferenceError<span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">super</span>.<span class="me1">run</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> arrIterator: ArrayIterator = <span class="kw2">new</span> ArrayIterator<span class="br0">&#40;</span>$arguments<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span>arrIterator.<span class="me1">hasNext</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; params.<span class="kw3">push</span><span class="br0">&#40;</span>arrIterator.<span class="me1">next</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// call remote service</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;<span class="kw3">try</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; connection.<span class="kw3">call</span>.<span class="kw3">apply</span><span class="br0">&#40;</span><span class="kw2">null</span>, params<span class="br0">&#41;</span>;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;<span class="kw3">catch</span><span class="br0">&#40;</span><span class="kw3">error</span>: <span class="kw3">Error</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;result.<span class="me1">addError</span><span class="br0">&#40;</span><span class="kw3">this</span>, <span class="kw3">error</span><span class="br0">&#41;</span>;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>;&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>The following test example based on my Flash Remoting example using <a href="http://www.openamf.com/">OpenAMF</a> described at the previous article called <a href="http://www.websector.de/blog/2007/09/23/best-practices-custom-class-mapping-using-openamf-and-as3-flash-cs3-not-flex/">&#8220;Best practices: Custom class mapping using OpenAMF and AS3 (Flash CS3 &#8211; not Flex)&#8221;</a></p>
<div class="codeHeadlineBox">
<p>RemotingTestCaseExample.as ( <a href="http://www.websector.de/blog/wp-content/uploads/2007/11/29/RemotingTestCaseExample.as">Download code</a> )</p>
</div>
<div class="actionscript" style="font-family: monospace;">
<ol>
<li class="li1">
<div class="de1">package tests</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">net</span>.<span class="me1">ObjectEncoding</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">net</span>.<span class="me1">Responder</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">import</span> asunit.<span class="me1">framework</span>.<span class="me1">RemotingTestCase</span>;&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp;&nbsp; * RemotingTestCaseExample </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp;&nbsp; * @author &nbsp;Jens Krause [www.websector.de]</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp;&nbsp; * @date&nbsp; &nbsp; 11/29/97</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp;&nbsp; */</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">class</span> RemotingTestCaseExample <span class="kw3">extends</span> RemotingTestCase </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span>&nbsp; &nbsp;&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _result: <span class="kw3">Object</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _userVO: UserVO;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * Constructor</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * @param testMethod&nbsp;&nbsp;String&nbsp; &nbsp;&nbsp; &nbsp;Name of the test case</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; */</span>&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> RemotingTestCaseExample<span class="br0">&#40;</span>testMethod: <span class="kw3">String</span> = <span class="kw2">null</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">super</span><span class="br0">&#40;</span>testMethod<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * After a test is executed the tearDown method is called </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * and removed all references to test objects</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; */</span>&nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; override protected <span class="kw2">function</span> tearDown<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _userVO = <span class="kw2">null</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * Before a test is executed the setUp method is called </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * which instantiate all necessary test objects</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; */</span>&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; override protected <span class="kw2">function</span> setUp<span class="br0">&#40;</span><span class="br0">&#41;</span>: <span class="kw3">void</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="br0">&#123;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; _userVO = _result as UserVO;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class="br0">&#125;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * Runs the test</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; */</span>&nbsp;&nbsp; &nbsp;&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span> override <span class="kw2">function</span> run<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; UserVO.<span class="me1">register</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _result = <span class="kw2">new</span> <span class="kw3">Object</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> gateway: <span class="kw3">String</span> = <span class="st0">&quot;http://localhost:8080/mappingExample/gateway&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> encoding: uint = ObjectEncoding.<span class="me1">AMF0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> method: <span class="kw3">String</span> = <span class="st0">&quot;de.websector.blog.openamf.mapping.services.UserServices.getUserByName&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> responder:Responder = <span class="kw2">new</span> Responder<span class="br0">&#40;</span>onResult, onFault<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">super</span>.<span class="kw3">connect</span><span class="br0">&#40;</span>gateway, encoding<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">super</span>.<span class="kw3">call</span><span class="br0">&#40;</span>method, responder, <span class="st0">&quot;Luke Skywalker&quot;</span><span class="br0">&#41;</span>;&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * Callback handler for receiving a fault</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * @param $result&nbsp; &nbsp; &nbsp; &nbsp; Object</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; */</span>&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> onFault<span class="br0">&#40;</span>$result: <span class="kw3">Object</span><span class="br0">&#41;</span>:<span class="kw3">void</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result.<span class="me1">addError</span><span class="br0">&#40;</span><span class="kw3">this</span>, <span class="kw2">new</span> <span class="kw3">Error</span><span class="br0">&#40;</span>$result.<span class="kw3">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// call super.run() to execute test methods</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">super</span>.<span class="me1">run</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * Callback handler for receiving a result</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * @param $result&nbsp; &nbsp; &nbsp; &nbsp; Object</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; */</span>&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> onResult<span class="br0">&#40;</span>$result: <span class="kw3">Object</span><span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _result = $result;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">super</span>.<span class="me1">disposeConnection</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// call super.run() to execute test methods</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">super</span>.<span class="me1">run</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * Tests the userVO</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; */</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> testUserVO<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; assertTrue<span class="br0">&#40;</span><span class="st0">&quot;result is instance of &quot;</span>, _result is UserVO<span class="br0">&#41;</span>;&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * Tests the userName</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; */</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> testUserName<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; assertEquals<span class="br0">&#40;</span><span class="st0">&quot;UserName Luke Skywalker&quot;</span>, _userVO.<span class="me1">userName</span>, <span class="st0">&quot;Luke Skywalker&quot;</span><span class="br0">&#41;</span>;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * Tests the registerDate</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; */</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> testRegisterDate<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; assertTrue<span class="br0">&#40;</span><span class="st0">&quot;Register date &quot;</span>, _userVO.<span class="me1">registerDate</span> is <span class="kw3">Date</span><span class="br0">&#41;</span>;&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//&nbsp; &nbsp; </span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//&nbsp; &nbsp; /**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//&nbsp;&nbsp; &nbsp; * Test that is born to lose.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//&nbsp;&nbsp; &nbsp; */</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//&nbsp;&nbsp; &nbsp;public function testFail():void </span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//&nbsp; &nbsp; {</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//&nbsp;&nbsp; &nbsp;&nbsp;assertFalse(&quot;failing test&quot;, true);</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//&nbsp;&nbsp; &nbsp;}</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<h2>Download</h2>
<p>Source including test example files: <br /><a href="http://www.websector.de/blog/?download=RemotingTestCaseExample.zip">RemotingTestCaseExample.zip</a> (Downloads: 937)</p>
<p>Happy (asynchronous) testing! <img src='http://www.websector.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  </p>
<h2>Acknowledge</h2>
<ul>
<li><strong>[AS3]</strong> Jonathan Marston: <a href="http://marstonstudio.com/index.php/2007/07/28/asunit-testing-with-flash-cs3-and-actionscript-3/">asunit testing with flash cs3 and actionscript 3</a></li>
<li><strong>[AS2]</strong> Tim Beynart &#8211; FlashCodersNY: <a href="http://www.flashcodersny.org/wordpress/?p=103">ASUnit Step-By-Step: Part One</a></li>
<li><strong>[AS2]</strong> Tim Beynart &#8211; FlashCodersNY: <a href="http://www.flashcodersny.org/wordpress/?p=124">Unit testing for ActionScript 2.0, Part 2</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.websector.de/blog/2007/11/29/asunit-as3-remotetestcase-for-testing-asynchronous-data-using-flash-remoting/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>ThunderBolt AS3 1.0 released &#8211; A lightweight logging tool for Flex 2 and Flash CS3 applications</title>
		<link>http://www.websector.de/blog/2007/10/14/thunderbolt-as3-10-released-a-lightweight-logging-tool-for-flex-2-and-flash-cs3-applications/</link>
		<comments>http://www.websector.de/blog/2007/10/14/thunderbolt-as3-10-released-a-lightweight-logging-tool-for-flex-2-and-flash-cs3-applications/#comments</comments>
		<pubDate>Sun, 14 Oct 2007 09:51:00 +0000</pubDate>
		<dc:creator>sectore</dc:creator>
				<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[ThunderBolt]]></category>

		<guid isPermaLink="false">http://www.websector.de/blog/2007/10/14/thunderbolt-as3-10-released-a-lightweight-logging-tool-for-flex-2-and-flash-cs3-applications/</guid>
		<description><![CDATA[ThunderBolt AS3 is a lightweight logging tool for Flex 2 and Flash CS3 applications using Firebug as its logging console. It&#8217;s open source based on the Mozilla Public License 1.1. Features based on ThunderBolt AS3 v.1.0 Log levels: INFO, WARN, ERROR, DEBUG (FATAL, ALL) Tree view for complex object structures such as class identifier and [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/p/flash-thunderbolt/wiki/ThunderBoltAS3">ThunderBolt AS3</a> is a lightweight logging tool for Flex 2 and Flash CS3 applications using <a href="http://www.getfirebug.com/">Firebug</a> as its logging console. It&#8217;s open source based on the <a href="http://www.mozilla.org/MPL/MPL-1.1.html">Mozilla Public License 1.1.</a></p>
<p><span id="more-40"></span></p>
<h2>Features based on ThunderBolt AS3 v.1.0</h2>
<ul>
<li>Log levels: INFO, WARN, ERROR, DEBUG (FATAL, ALL)</li>
<li>Tree view for complex object structures such as class identifier and its properties</li>
<li>Custom LogTarget based on Flex Logging API including filters</li>
<li>Memory snapshot</li>
<li>SWC components for logging using Flex 2 or Flash CS3. Only 4kB for the Flash based SWC and 24kB for Flex one using the Flex 2 Logging Framework.</li>
</ul>
<p>For more information check the <a href="http://code.google.com/p/flash-thunderbolt/wiki/ThunderBoltAS3">Wiki</a> on <a href="http://code.google.com/p/flash-thunderbolt/">Google Code</a>.</p>
<h2>Live examples</h2>
<p><strong>Note:</strong> Press F12 to open Firebug within Firefox to receive all logging messages.<br />Any questions&#8230;? What the fuck is <a href="http://www.getfirebug.com/">Firebug</a>&#8230;? <img src='http://www.websector.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><strong>Pure Flex 2 example:</strong></p>
<p><!-- #START example 2 --></p>
<div width="500" height="150">

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_ThunderBoltFlexExample_252206859"
			class="flashmovie"
			width="500"
			height="150">
	<param name="movie" value="http://www.websector.de/blog/wp-content/uploads/2007/10/14/ThunderBoltFlexExample.swf" />
	<param name="menu" value="false" />
	<param name="bgcolor" value="#FFFFFF" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://www.websector.de/blog/wp-content/uploads/2007/10/14/ThunderBoltFlexExample.swf"
			name="fm_ThunderBoltFlexExample_252206859"
			width="500"
			height="150">
		<param name="menu" value="false" />
		<param name="bgcolor" value="#FFFFFF" />
	<!--<![endif]-->
		
<p><a href="http://adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>

	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p>&nbsp;</p>
</div>
<p><!-- #END example 2 --></p>
<p><strong>Flex 2 example using the Flex 2 Logging Framework:</strong></p>
<p><!-- #START example 2 -->
<div width="500" height="150">

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_ThunderBoltTargetExample_964706459"
			class="flashmovie"
			width="500"
			height="150">
	<param name="movie" value="http://www.websector.de/blog/wp-content/uploads/2007/10/14/ThunderBoltTargetExample.swf" />
	<param name="menu" value="false" />
	<param name="bgcolor" value="#FFFFFF" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://www.websector.de/blog/wp-content/uploads/2007/10/14/ThunderBoltTargetExample.swf"
			name="fm_ThunderBoltTargetExample_964706459"
			width="500"
			height="150">
		<param name="menu" value="false" />
		<param name="bgcolor" value="#FFFFFF" />
	<!--<![endif]-->
		
<p><a href="http://adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>

	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p>&nbsp;</p>
</div>
<p><!-- #END example 2 --></p>
<p><strong>Pure Flash CS3 example:</strong></p>
<p><!-- #START example 3 --></p>
<div width="500" height="200">

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_flashThunderBoltAS3Example_1320455093"
			class="flashmovie"
			width="500"
			height="200">
	<param name="movie" value="http://www.websector.de/blog/wp-content/uploads/2007/10/14/flashThunderBoltAS3Example.swf" />
	<param name="menu" value="false" />
	<param name="bgcolor" value="#FFFFFF" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://www.websector.de/blog/wp-content/uploads/2007/10/14/flashThunderBoltAS3Example.swf"
			name="fm_flashThunderBoltAS3Example_1320455093"
			width="500"
			height="200">
		<param name="menu" value="false" />
		<param name="bgcolor" value="#FFFFFF" />
	<!--<![endif]-->
		
<p><a href="http://adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>

	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p>&nbsp;</p>
</div>
<p><!-- #END example 3 --></p>
<h2>Free download</h2>
<p>Full source of ThunderBolt AS3 including all examples and libraries as SWC&#8217;s:  <br /><a href="http://www.websector.de/blog/?download=ExamplesThunderBoltAS3.zip">ThunderBoltAS3_v1.0.zip</a><br />(Downloads: 1804)</p>
<p>Happy logging <img src='http://www.websector.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.websector.de/blog/2007/10/14/thunderbolt-as3-10-released-a-lightweight-logging-tool-for-flex-2-and-flash-cs3-applications/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Detecting memory leaks in Flash or Flex applications using WSMonitor</title>
		<link>http://www.websector.de/blog/2007/10/01/detecting-memory-leaks-in-flash-or-flex-applications-using-wsmonitor/</link>
		<comments>http://www.websector.de/blog/2007/10/01/detecting-memory-leaks-in-flash-or-flex-applications-using-wsmonitor/#comments</comments>
		<pubDate>Mon, 01 Oct 2007 09:23:00 +0000</pubDate>
		<dc:creator>sectore</dc:creator>
				<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://www.websector.de/blog/2007/10/01/detecting-memory-leaks-in-flash-or-flex-applications-using-wsmonitor/</guid>
		<description><![CDATA[WSMonitor is a handy tool based on AS3 to detect memory issues in Flash or Flex applications. It&#8217;s simple to use and it&#8217;s free &#8211; including full source. Example Press start button to run WSMonitor. All Flash movies running within this Browser are monitored, such as the maps.amung.us plugin located on right hand. 
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_WSMonitor_321871912"
			class="flashmovie"
			width="400"
			height="300">
	<param name="movie" value="http://www.websector.de/blog/wp-content/uploads/2007/10/01/WSMonitor.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://www.websector.de/blog/wp-content/uploads/2007/10/01/WSMonitor.swf"
			name="fm_WSMonitor_321871912"
			width="400"
			height="300">
	<!--<![endif]-->
		]]></description>
			<content:encoded><![CDATA[<p>WSMonitor is a handy tool based on AS3 to detect memory issues in Flash or Flex applications. It&#8217;s simple to use and it&#8217;s free &#8211; including full source.</p>
<p><span id="more-39"></span></p>
<h2>Example</h2>
<p>Press start button to run WSMonitor. All Flash movies running within this Browser are monitored, such as the maps.amung.us plugin located on right hand.</p>
<div width="330" height="220">
[kml_flashembed movie="http://www.websector.de/blog/wp-content/uploads/2007/10/01/WSMonitor.swf" width="330" height="220"  bgcolor="#FFFFFF" fversion="9.0.28" menu="false"]</p>
<p><a href="http://adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>

	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p>&nbsp;</p>
</div>
<h2>Instruction</h2>
<p>Just open your Flash or Flex app within Browser or Flash Standalone Player and start WSMonitor using <code>WSMonitor.html</code> or <code>WSMonitor.swf</code> located in folder named &#8220;deploy&#8221;.</p>
<p>Note: WSMonitor and your app have to run with the same Flash Player. </p>
<h2>Free download</h2>
<p><a href="http://www.websector.de/blog/?download=WSMonitor.zip">WSMonitor.zip</a><br />(Downloads: 7781)</p>
<p>WSMonitor is open source licensed under the <a href="http://www.mozilla.org/MPL/MPL-1.1.html">Mozilla Public License 1.1.</a></p>
<h2>Full source</h2>
<p>Update on 08/29/09: Source code is moved to GitHub <a href="http://github.com/sectore/wsmonitor/">http://github.com/sectore/wsmonitor/</a></p>
<h2>Acknowledgment</h2>
<p>Thanks to Artjom Tarassov, who is one of the smartes Flash programmer I&#8217;ve ever met, for the active exchange of ideas during the last weeks <img src='http://www.websector.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.websector.de/blog/2007/10/01/detecting-memory-leaks-in-flash-or-flex-applications-using-wsmonitor/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>[Update - Part 2] Logging Flex 2 and AS3 applications with Firebug and ThunderBolt</title>
		<link>http://www.websector.de/blog/2007/06/20/update-part-2-logging-flex-2-and-as3-applications-with-firebug-and-thunderbolt/</link>
		<comments>http://www.websector.de/blog/2007/06/20/update-part-2-logging-flex-2-and-as3-applications-with-firebug-and-thunderbolt/#comments</comments>
		<pubDate>Wed, 20 Jun 2007 17:51:00 +0000</pubDate>
		<dc:creator>sectore</dc:creator>
				<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[ThunderBolt]]></category>

		<guid isPermaLink="false">http://www.websector.de/blog/2007/06/20/update-part-2-logging-flex-2-and-as3-applications-with-firebug-and-thunderbolt/</guid>
		<description><![CDATA[This is the second part about the latest update of ThunderBolt AS3. ThunderBolt AS3 is an open source logger extension for Flex 2 or Flash ActionScript 3 applications using Firebug within Firefox. In part 1 I described a way for using ThunderBolt AS3 with the Flex 2 Logging Framework using an own log target called [...]]]></description>
			<content:encoded><![CDATA[<p>This is the second part about the latest update of <a href="http://code.google.com/p/flash-thunderbolt/">ThunderBolt AS3</a>. ThunderBolt AS3 is an open source logger extension for Flex 2 or Flash ActionScript 3 applications using <a href="http://www.getfirebug.com">Firebug</a> within <a href="http://www.mozilla.com/en-US/firefox/">Firefox</a>.</p>
<p><span id="more-29"></span></p>
<p>In <a href="http://www.websector.de/blog/2007/06/17/update-part-1-logging-flex-2-applications-with-firebug-and-thunderbolt-using-the-flex-2-logging-framework/">part 1</a> I described a way for using ThunderBolt AS3 with the Flex 2 Logging Framework using an own log target called <a href="http://flash-thunderbolt.googlecode.com/svn/trunk/as3/source/org/osflash/thunderbolt/ThunderBoltTarget.as">ThunderBoltTarget</a>. This is a handy extension, but it has a disadvantage: The Flex 2 Logging Framework doesn&#8217;t support outputs of nested objects because the <a href="http://livedocs.adobe.com/flex/2/langref/mx/logging/Log.html">original Flex 2 Log instance</a> uses an instance of the <a href="http://livedocs.adobe.com/flex/2/langref/mx/logging/LogLogger.html">LogLogger</a> which dispatches only a message of the logged object typed as String.</p>
<p>For this issue is better to use the ThunderBolt <a href="http://flash-thunderbolt.googlecode.com/svn/trunk/as3/source/org/osflash/thunderbolt/Logger.as">Logger instance</a> directly for logging objects and its nested objects including all properties <img src='http://www.websector.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  . With the latest release I have added a common way for using log levels as well. Check out the the following instructions.</p>
<h2>Example</h2>
<div width="500" height="220">

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_ThunderBoltAS3Example_1504582851"
			class="flashmovie"
			width="100%"
			height="220">
	<param name="movie" value="http://www.websector.de/blog/wp-content/uploads/2007/06/21/ThunderBoltAS3Example.swf" />
	<param name="menu" value="false" />
	<param name="bgcolor" value="#003366" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://www.websector.de/blog/wp-content/uploads/2007/06/21/ThunderBoltAS3Example.swf"
			name="fm_ThunderBoltAS3Example_1504582851"
			width="100%"
			height="220">
		<param name="menu" value="false" />
		<param name="bgcolor" value="#003366" />
	<!--<![endif]-->
		
<p><a href="http://adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>

	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p>&nbsp;</p>
</div>
<h2>Screen Shot: Logging to Firebug</h2>
<p><img src="http://www.websector.de/blog/wp-content/uploads/2007/06/21/firebugScreen.png" width="500" height="340" /></p>
<h2>Instructions</h2>
<p>
<ol>
<li>Grab the latest ThunderBolt AS3 package (includes two classes only) from its repository<a href="http://code.google.com/p/flash-thunderbolt/source"> via SVN</a> on Google Code or download it <a href="http://flash-thunderbolt.googlecode.com/svn/trunk/as3/source/org/osflash/thunderbolt/">directly</a>. Make sure that you have installed <a href="http://www.getfirebug.com">Firebug</a> as well.</li>
<li>
<p>For logging to Firebug call the ThunderBolt Logger class methods such as info, warn, error, debug. You don&#8217;t need to create an instance of Logger because all of its public methods and public properties are static.</p>
<phpcode>
<div class="codeHeadlineBox">
<p>Code examples using ThunderBolt</p>
</div>
<div class="actionscript" style="font-family: monospace;">
<ol>
<li class="li1">
<div class="de1"><span class="co1">//</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// import ThunderBolt Logger</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">import</span> org.<span class="me1">osflash</span>.<span class="me1">thunderbolt</span>.<span class="me1">Logger</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// log a string as an info message</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> myString: <span class="kw3">String</span> = <span class="st0">&quot;Lorem ipsum&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">Logger.<span class="me1">info</span> <span class="br0">&#40;</span><span class="st0">&quot;A simple string&quot;</span>, myString<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// Log two objects (or more <img src='http://www.websector.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ) as an error message</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> myNumber: <span class="kw3">int</span> = <span class="nu0">5</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> myString2: <span class="kw3">String</span> = <span class="st0">&quot;Lorem ipsum&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">Logger.<span class="kw3">error</span> <span class="br0">&#40;</span><span class="st0">&quot;Two log objects: A number typed as int and a string&quot;</span>, myNumber, myString2<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// Log an array with a nested object as a warn message</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> myArray: <span class="kw3">Array</span> = <span class="br0">&#91;</span><span class="st0">&quot;firstValue&quot;</span>,<span class="br0">&#123;</span>x: <span class="nu0">100</span>, y: <span class="nu0">200</span><span class="br0">&#125;</span>, <span class="st0">&quot;secondValue&quot;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">Logger.<span class="me1">warn</span> <span class="br0">&#40;</span><span class="st0">&quot;An array with a nested object: &quot;</span>, myArray<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// Log an object with a nested array as a debug message</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> myObject: <span class="kw3">Object</span> = <span class="br0">&#123;</span>exampleArray: <span class="br0">&#91;</span><span class="st0">&quot;firstValue&quot;</span>, <span class="st0">&quot;secondValue&quot;</span><span class="br0">&#93;</span>, y: <span class="nu0">10</span>, exampleString: <span class="st0">&quot;Hello&quot;</span>, nestedObject: <span class="br0">&#123;</span>x: <span class="nu0">100</span>, y: <span class="nu0">200</span><span class="br0">&#125;</span><span class="br0">&#125;</span>;</div>
</li>
<li class="li1">
<div class="de1">Logger.<span class="me1">debug</span> <span class="br0">&#40;</span><span class="st0">&quot;An object with a nested object and nested array&quot;</span>, o<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// Optionally you can hide the time stamp</span></div>
</li>
<li class="li1">
<div class="de1">Logger.<span class="me1">includeTime</span> = <span class="kw2">false</span>;</div>
</li>
</ol>
</div>
</phpcode></li>
<li>That&#8217;s all &#8211; happy logging <img src='http://www.websector.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
</ol>
<h2>Source</h2>
<p>You will find the <a href="http://code.google.com/p/flash-thunderbolt/source">latest source</a> of the ThunderBolt AS 3 package on Google Code too. It&#8217;s open source and based on the <a href="http://www.mozilla.org/MPL/MPL-1.1.html">Mozilla Public License 1.1</a>.</p>
<p>
<phpcode>
<div class="codeHeadlineBox">
<p>ThunderBolts core class named &#8220;Logger.as&#8221; ( <a href="http://www.websector.de/blog/wp-content/uploads/2007/06/21/Logger.as">Download code</a> )</p>
</div>
<div class="actionscript" style="font-family: monospace;">
<ol>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">* Logging Flex and AS3 projects with Firebug using ThunderBolt AS3</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">* </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">* @version&nbsp; 0.9.1</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">* @author&nbsp; &nbsp;Jens Krause [www.websector.de]</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">* @date&nbsp;&nbsp;06/29/07</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">* @see&nbsp; &nbsp; http://www.websector.de/blog/?s=thunderbolt</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">* @see&nbsp; &nbsp; http://code.google.com/p/flash-thunderbolt/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">* @source&nbsp; &nbsp;http://flash-thunderbolt.googlecode.com/svn/trunk/as3/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">* </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">* ***********************</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">* HAPPY LOGGING <img src='http://www.websector.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">* ***********************</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">* </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">package org.<span class="me1">osflash</span>.<span class="me1">thunderbolt</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">external</span>.<span class="me1">ExternalInterface</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">utils</span>.<span class="me1">describeType</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">utils</span>.<span class="me1">getQualifiedClassName</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">utils</span>.<span class="me1">getDefinitionByName</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">import</span> mx.<span class="me1">logging</span>.<span class="me1">LogEventLevel</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">import</span> mx.<span class="me1">logging</span>.<span class="me1">LogEvent</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; * Thunderbolts AS3 Logger class</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; */</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">class</span> Logger</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Firebug supports 4 log levels only</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; protected <span class="kw3">static</span> const INFO: <span class="kw3">String</span> = <span class="st0">&quot;info&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; protected <span class="kw3">static</span> const WARN: <span class="kw3">String</span> = <span class="st0">&quot;warn&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; protected <span class="kw3">static</span> const <span class="kw3">ERROR</span>: <span class="kw3">String</span> = <span class="st0">&quot;error&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; protected <span class="kw3">static</span> const <span class="kw3">LOG</span>: <span class="kw3">String</span> = <span class="st0">&quot;log&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; protected <span class="kw3">static</span> const FIELD_SEPERATOR: <span class="kw3">String</span> = <span class="st0">&quot; :: &quot;</span>;&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; protected <span class="kw3">static</span> const MAX_DEPTH: <span class="kw3">int</span> = <span class="nu0">255</span>;&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">var</span> _stopLog: <span class="kw3">Boolean</span> = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">var</span> depth: <span class="kw3">int</span>;&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">var</span> logLevel: <span class="kw3">String</span>;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> <span class="kw2">var</span> includeTime: <span class="kw3">Boolean</span> = <span class="kw2">true</span>;&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * Logs info messages including objects for calling Firebug</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param &nbsp; msg&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;log Message </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param &nbsp; logObjects&nbsp; &nbsp; &nbsp; &nbsp; log objects</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span>&nbsp;&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> <span class="kw2">function</span> info <span class="br0">&#40;</span>msg: <span class="kw3">String</span> = <span class="kw2">null</span>, &#8230; <span class="me1">logObjects</span><span class="br0">&#41;</span>: <span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Logger.<span class="kw3">trace</span><span class="br0">&#40;</span>LogEventLevel.<span class="me1">INFO</span>, msg, logObjects<span class="br0">&#41;</span>;&nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * Logs warn messages including objects for calling Firebug</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param &nbsp; msg&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;log Message </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param &nbsp; logObjects&nbsp; &nbsp; &nbsp; &nbsp; log objects</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span>&nbsp;&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> <span class="kw2">function</span> warn <span class="br0">&#40;</span>msg: <span class="kw3">String</span> = <span class="kw2">null</span>, &#8230; <span class="me1">logObjects</span><span class="br0">&#41;</span>: <span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Logger.<span class="kw3">trace</span><span class="br0">&#40;</span>LogEventLevel.<span class="me1">WARN</span>, msg, logObjects<span class="br0">&#41;</span>;&nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * Logs error messages including objects for calling Firebug</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param &nbsp; msg&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;log Message </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param &nbsp; logObjects&nbsp; &nbsp; &nbsp; &nbsp; log objects</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span>&nbsp;&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> <span class="kw2">function</span> <span class="kw3">error</span> <span class="br0">&#40;</span>msg: <span class="kw3">String</span> = <span class="kw2">null</span>, &#8230; <span class="me1">logObjects</span><span class="br0">&#41;</span>: <span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Logger.<span class="kw3">trace</span><span class="br0">&#40;</span>LogEventLevel.<span class="kw3">ERROR</span>, msg, logObjects<span class="br0">&#41;</span>;&nbsp;&nbsp;&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * Logs debug messages messages including objects for calling Firebug</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param &nbsp; msg&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;log Message </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param &nbsp; logObjects&nbsp; &nbsp; &nbsp; &nbsp; log objects</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span>&nbsp;&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> <span class="kw2">function</span> debug <span class="br0">&#40;</span>msg: <span class="kw3">String</span> = <span class="kw2">null</span>, &#8230; <span class="me1">logObjects</span><span class="br0">&#41;</span>: <span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Logger.<span class="kw3">trace</span><span class="br0">&#40;</span>LogEventLevel.<span class="me1">DEBUG</span>, msg, logObjects<span class="br0">&#41;</span>;&nbsp;&nbsp;&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>&nbsp; &nbsp;&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * Calls Firebugs command line API to write log information</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param &nbsp; msg&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;log Message </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param &nbsp; logObjects&nbsp; &nbsp; &nbsp; &nbsp; log objects</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span>&nbsp;&nbsp;&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> <span class="kw2">function</span> <span class="kw3">trace</span> <span class="br0">&#40;</span><span class="kw3">level</span>: <span class="kw3">Number</span> = <span class="nu0">0</span>, msg: <span class="kw3">String</span> = <span class="kw2">null</span>, &#8230; <span class="me1">logObjects</span><span class="br0">&#41;</span>: <span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;depth = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;<span class="co1">// get log level</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;logLevel = Logger.<span class="me1">getLogLevel</span><span class="br0">&#40;</span><span class="kw3">level</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;<span class="co1">// add log level to log messagef</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;<span class="kw2">var</span> logMsg: <span class="kw3">String</span> = <span class="st0">&quot;[&quot;</span> + logLevel.<span class="kw3">toUpperCase</span><span class="br0">&#40;</span><span class="br0">&#41;</span> + <span class="st0">&quot;] &quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; <span class="co1">// add time&nbsp;to log message</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>includeTime<span class="br0">&#41;</span> logMsg += getCurrentTime<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// add message text to log message</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;logMsg += <span class="br0">&#40;</span>msg != <span class="kw2">null</span> &amp;&amp; msg.<span class="kw3">length</span><span class="br0">&#41;</span> ? msg : <span class="st0">&quot;&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;<span class="co1">// call Firebug&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;ExternalInterface.<span class="kw3">call</span><span class="br0">&#40;</span><span class="st0">&quot;console.&quot;</span> + logLevel, logMsg<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;<span class="co1">// log objects&nbsp; &nbsp; &nbsp; </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i:uint = <span class="nu0">0</span>; i &lt; logObjects.<span class="kw3">length</span>; i++<span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; Logger.<span class="me1">logObject</span><span class="br0">&#40;</span>logObjects<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; <span class="br0">&#125;</span>&nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * Translates Flex log levels to Firebugs log levels</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param &nbsp; msg</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @return &nbsp;level description</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span>&nbsp;&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">function</span> getLogLevel <span class="br0">&#40;</span>logLevel: <span class="kw3">Number</span><span class="br0">&#41;</span>: <span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> <span class="kw3">level</span>: <span class="kw3">String</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">switch</span> <span class="br0">&#40;</span>logLevel<span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> LogEventLevel.<span class="me1">INFO</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">level</span> = Logger.<span class="me1">INFO</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> LogEventLevel.<span class="me1">WARN</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">level</span> = Logger.<span class="me1">WARN</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> LogEventLevel.<span class="kw3">ERROR</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">level</span> = Logger.<span class="kw3">ERROR</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Firebug doesn&#8217;t support a fatal level</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// so we use here Firebugs ERROR level when you&#8217;re using ThunderBoltTarget</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> LogEventLevel.<span class="me1">FATAL</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">level</span> = Logger.<span class="kw3">ERROR</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">default</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// for LogEventLevel.DEBUG &amp;&amp; LogEventLevel.ALL </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// so we use here Firebugs LOG level when you&#8217;re using ThunderBoltTarget</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">level</span> = Logger.<span class="kw3">LOG</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw3">level</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * Logs nested instances and properties</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param &nbsp; logObj&nbsp; &nbsp; log object</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param &nbsp; id&nbsp; &nbsp; &nbsp; &nbsp; short description of log object</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span>&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">function</span> logObject <span class="br0">&#40;</span>logObj: *, id: <span class="kw3">String</span> = <span class="kw2">null</span><span class="br0">&#41;</span>: <span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>depth &lt; Logger.<span class="me1">MAX_DEPTH</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ++ depth;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> propID: <span class="kw3">String</span> = id || <span class="st0">&quot;&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> description:<span class="kw3">XML</span> = describeType<span class="br0">&#40;</span>logObj<span class="br0">&#41;</span>;&nbsp;&nbsp;&nbsp;&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> <span class="kw3">type</span>: <span class="kw3">String</span> = description.@<span class="kw3">name</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>primitiveType<span class="br0">&#40;</span><span class="kw3">type</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> msg: <span class="kw3">String</span> = <span class="br0">&#40;</span>propID.<span class="kw3">length</span><span class="br0">&#41;</span> &nbsp; ? &nbsp; &nbsp; <span class="st0">&quot;[&quot;</span> + <span class="kw3">type</span> + <span class="st0">&quot;] &quot;</span> + propID + <span class="st0">&quot; = &quot;</span> + logObj</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &nbsp; <span class="st0">&quot;[&quot;</span> + <span class="kw3">type</span> + <span class="st0">&quot;] &quot;</span> + logObj;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ExternalInterface.<span class="kw3">call</span><span class="br0">&#40;</span><span class="st0">&quot;console.&quot;</span> + Logger.<span class="kw3">LOG</span>, msg<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">type</span> == <span class="st0">&quot;Object&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; ExternalInterface.<span class="kw3">call</span><span class="br0">&#40;</span><span class="st0">&quot;console.group&quot;</span>, <span class="st0">&quot;[Object] &quot;</span> + propID<span class="br0">&#41;</span>;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> element: <span class="kw3">String</span> <span class="kw1">in</span> logObj<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; logObject<span class="br0">&#40;</span>logObj<span class="br0">&#91;</span>element<span class="br0">&#93;</span>, element<span class="br0">&#41;</span>;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; ExternalInterface.<span class="kw3">call</span><span class="br0">&#40;</span><span class="st0">&quot;console.groupEnd&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">type</span> == <span class="st0">&quot;Array&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; <span class="coMULTI">/* don&#8217;t create a group on depth 1 when we are using the &#8230; (rest) parameter calling by Logger.trace() <img src='http://www.websector.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  */</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>depth &gt; <span class="nu0">1</span><span class="br0">&#41;</span> ExternalInterface.<span class="kw3">call</span><span class="br0">&#40;</span><span class="st0">&quot;console.group&quot;</span>, <span class="st0">&quot;[Array] &quot;</span> + propID<span class="br0">&#41;</span>;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i: <span class="kw3">int</span> = <span class="nu0">0</span>; i &lt; logObj.<span class="kw3">length</span>; i++<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; logObject<span class="br0">&#40;</span>logObj<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; ExternalInterface.<span class="kw3">call</span><span class="br0">&#40;</span><span class="st0">&quot;console.groupEnd&quot;</span><span class="br0">&#41;</span>;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// log private props as well &#8211; thx Rob Herman [http://www.toolsbydesign.com] <img src='http://www.websector.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> <span class="kw3">list</span>: XMLList = description..<span class="me1">accessor</span>;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">list</span>.<span class="kw3">length</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> each<span class="br0">&#40;</span><span class="kw2">var</span> item: <span class="kw3">XML</span> <span class="kw1">in</span> <span class="kw3">list</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> propItem: <span class="kw3">String</span> = item.@<span class="kw3">name</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> typeItem: <span class="kw3">String</span> = item.@<span class="kw3">type</span>;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> access: <span class="kw3">String</span> = item.@access;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// log objects &amp;&amp; properties accessing &quot;readwrite&quot; and &quot;readonly&quot; only </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>access &amp;&amp; access != <span class="st0">&quot;writeonly&quot;</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//TODO: filter classes</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// var classReference: Class = getDefinitionByName(typeItem) as Class;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> valueItem: * = logObj<span class="br0">&#91;</span>propItem<span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; logObject<span class="br0">&#40;</span>valueItem, propItem<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; logObject<span class="br0">&#40;</span>logObj, <span class="kw3">type</span><span class="br0">&#41;</span>;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// call one stop message only <img src='http://www.websector.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>!_stopLog<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ExternalInterface.<span class="kw3">call</span><span class="br0">&#40;</span><span class="st0">&quot;console.&quot;</span> + Logger.<span class="me1">WARN</span>, <span class="st0">&quot;STOP LOGGING: More than &quot;</span> + depth + <span class="st0">&quot; nested objects or properties.&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _stopLog = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * Checking for primitive types</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param &nbsp; type&nbsp; &nbsp; &nbsp; &nbsp; type of object</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @return &nbsp;isPrimitiveType &nbsp;isPrimitiveType</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">function</span> primitiveType <span class="br0">&#40;</span><span class="kw3">type</span>: <span class="kw3">String</span><span class="br0">&#41;</span>: <span class="kw3">Boolean</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> isPrimitiveType: <span class="kw3">Boolean</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">switch</span> <span class="br0">&#40;</span><span class="kw3">type</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;Boolean&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;void&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;int&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;uint&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;Number&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;String&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;undefined&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;null&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isPrimitiveType = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;&nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">default</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isPrimitiveType = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> isPrimitiveType;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * Creates a valid time value</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param &nbsp; number&nbsp; &nbsp; &nbsp;&nbsp; &nbsp;Hour, minute or second</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @return &nbsp;string &nbsp; &nbsp; A valid hour, minute or second</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">function</span> getCurrentTime <span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> currentDate: <span class="kw3">Date</span> = <span class="kw2">new</span> <span class="kw3">Date</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> currentTime: <span class="kw3">String</span> = &nbsp; <span class="st0">&quot;time &quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; + timeToValidString<span class="br0">&#40;</span>currentDate.<span class="kw3">getHours</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; + <span class="st0">&quot;:&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; + timeToValidString<span class="br0">&#40;</span>currentDate.<span class="kw3">getHours</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; + <span class="st0">&quot;:&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; + timeToValidString<span class="br0">&#40;</span>currentDate.<span class="kw3">getMinutes</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; + <span class="st0">&quot;:&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; + timeToValidString<span class="br0">&#40;</span>currentDate.<span class="kw3">getSeconds</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; + <span class="st0">&quot;.&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; + timeToValidString<span class="br0">&#40;</span>currentDate.<span class="kw3">getMilliseconds</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> + FIELD_SEPERATOR;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> currentTime;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * Creates a valid time value</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param &nbsp; number&nbsp; &nbsp; &nbsp;&nbsp; &nbsp;Hour, minute or second</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @return &nbsp;string &nbsp; &nbsp; A valid hour, minute or second</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">function</span> timeToValidString<span class="br0">&#40;</span>timeValue: <span class="kw3">Number</span><span class="br0">&#41;</span>:<span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> timeValue &gt; <span class="nu0">9</span> ? timeValue.<span class="kw3">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span> : <span class="st0">&quot;0&quot;</span> + timeValue.<span class="kw3">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
</phpcode>
]]></content:encoded>
			<wfw:commentRss>http://www.websector.de/blog/2007/06/20/update-part-2-logging-flex-2-and-as3-applications-with-firebug-and-thunderbolt/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Logging Flex 2 and AS 3 apps with Firebug and ThunderBolt</title>
		<link>http://www.websector.de/blog/2007/04/21/logging-flex-2-and-as-3-apps-with-firebug-and-thunderbolt/</link>
		<comments>http://www.websector.de/blog/2007/04/21/logging-flex-2-and-as-3-apps-with-firebug-and-thunderbolt/#comments</comments>
		<pubDate>Sat, 21 Apr 2007 08:40:00 +0000</pubDate>
		<dc:creator>sectore</dc:creator>
				<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[ThunderBolt]]></category>

		<guid isPermaLink="false">http://www.websector.de/blog/2007/04/21/logging-flex-2-and-as-3-apps-with-firebug-and-thunderbolt/</guid>
		<description><![CDATA[A few weeks ago Martin Kleppe started a project on Google Code called Flash-ThunderBolt. The idea behind based on Manfred Webers blog entry &#8220;Make MTASC talk to Firebug&#8221; which describes a way for logging Flash apps compiled with MTASC using Firebug. I&#8217;ve already joined the Flash-Thunderbolt project for coding an AS3 version. It won&#8217;t be [...]]]></description>
			<content:encoded><![CDATA[<p>A few weeks ago <a href="http://www.ubilabs.net">Martin Kleppe</a> started a project on Google Code called <a href="http://code.google.com/p/flash-thunderbolt/">Flash-ThunderBolt</a>. The idea behind based on <a href="http://manfred.dschini.org/">Manfred Webers</a> blog entry <a href="http://manfred.dschini.org/2007/03/14/make-mtasc-talk-to-firebug/">&#8220;Make MTASC talk to Firebug&#8221;</a> which describes a way for logging Flash apps compiled with MTASC using Firebug. </p>
<p>I&#8217;ve already joined the Flash-Thunderbolt project for coding an AS3 version. It won&#8217;t be a copy of the current AS2 package but rather another approach for using <a href="http://www.getfirebug.com/console.html">Firebugs Console API</a> as simple as possible. Check it out, here are my first steps:</p>
<p><span id="more-27"></span></p>
<h2>Example</h2>
<div width="500" height="200">

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_ThunderBoltAS3Example_2007669754"
			class="flashmovie"
			width="100%"
			height="200">
	<param name="movie" value="http://www.websector.de/blog/wp-content/uploads/2007/04/ThunderBoltAS3Example.swf" />
	<param name="menu" value="false" />
	<param name="bgcolor" value="#000000" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://www.websector.de/blog/wp-content/uploads/2007/04/ThunderBoltAS3Example.swf"
			name="fm_ThunderBoltAS3Example_2007669754"
			width="100%"
			height="200">
		<param name="menu" value="false" />
		<param name="bgcolor" value="#000000" />
	<!--<![endif]-->
		
<p><a href="http://adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>

	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p>&nbsp;</p>
</div>
<h2>Instructions</h2>
<p>The ThunderBolt AS3 package contains only one class named <em>Logger.as</em>. It supports logging primitive types such as <em>Number</em>, <em>String</em>, <em>Boolean</em>, etc. as well as <em>Objects</em>, <em>Arrays</em> and <em>public properties</em> of all classes. Use short cuts for determing different log levels as <a href="http://osflash.org/zeroi">Zeroi</a> does: &#8220;i&#8221; = info, &#8220;e&#8221; = error, &#8220;w&#8221; = warn, &#8220;d&#8221; = debug.</p>
<p>Here is an example:</p>
<phpcode>
<div class="codeHeadlineBox">
<p>ThunderBoltAS3Example.mxml ( <a href="http://www.websector.de/blog/wp-content/uploads/2007/04/21/ThunderBoltAS3Example.mxml">Download code</a> )</p>
</div>
<div class="actionscript" style="font-family: monospace;">
<ol>
<li class="li1">
<div class="de1">&lt;?<span class="kw3">xml</span> <span class="kw3">version</span>=<span class="st0">&quot;1.0&quot;</span> encoding=<span class="st0">&quot;utf-8&quot;</span>?&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;mx:Application xmlns:mx=<span class="st0">&quot;http://www.adobe.com/2006/mxml&quot;</span>&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;mx:Script&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;!<span class="br0">&#91;</span>CDATA<span class="br0">&#91;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">import</span> org.<span class="me1">osflash</span>.<span class="me1">thunderbolt</span>.<span class="me1">Logger</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">events</span>.<span class="me1">Event</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> traceToFirebug<span class="br0">&#40;</span>event:Event<span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> n: <span class="kw3">int</span> = <span class="nu0">5</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> s: <span class="kw3">String</span> = <span class="st0">&quot;Lorem ipsum&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> o: <span class="kw3">Object</span> = <span class="br0">&#123;</span>exampleArray: <span class="br0">&#91;</span><span class="st0">&quot;firstValue&quot;</span>, <span class="st0">&quot;secondValue&quot;</span><span class="br0">&#93;</span>, y: <span class="nu0">10</span>, exampleString: <span class="st0">&quot;Hello&quot;</span>, nestedObject: <span class="br0">&#123;</span>x: <span class="nu0">100</span>, y: <span class="nu0">200</span><span class="br0">&#125;</span><span class="br0">&#125;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> a: <span class="kw3">Array</span> = <span class="br0">&#91;</span><span class="st0">&quot;firstValue&quot;</span>,<span class="br0">&#123;</span>x: <span class="nu0">100</span>, y: <span class="nu0">200</span><span class="br0">&#125;</span>, <span class="st0">&quot;secondValue&quot;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> label: <span class="kw3">String</span> = event.<span class="kw3">target</span>.<span class="me1">label</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">switch</span> <span class="br0">&#40;</span>label<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;info&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Logger.<span class="kw3">trace</span> <span class="br0">&#40;</span><span class="st0">&quot;i a simple string&quot;</span>, s<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;error&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Logger.<span class="kw3">trace</span> <span class="br0">&#40;</span><span class="st0">&quot;i a number typed as int&quot;</span>, n<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;warn&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Logger.<span class="kw3">trace</span> <span class="br0">&#40;</span><span class="st0">&quot;e an array with a nested object: &quot;</span>, a<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;debug&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Logger.<span class="kw3">trace</span> <span class="br0">&#40;</span><span class="st0">&quot;w an object with a nested object and nested array&quot;</span>,o<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">default</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;&nbsp; &nbsp;<span class="br0">&#93;</span><span class="br0">&#93;</span>&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;/mx:Script&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;mx:Style source=<span class="st0">&quot;css/logger.css&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;mx:<span class="kw3">Text</span> <span class="kw3">htmlText</span>=<span class="st0">&quot;Press F12 to open Firebug&quot;</span> paddingBottom=<span class="st0">&quot;20&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;mx:HBox horizontalGap=<span class="st0">&quot;10&quot;</span>&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;mx:<span class="kw3">Button</span> label=<span class="st0">&quot;info&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; click=<span class="st0">&quot;traceToFirebug(event);&quot;</span> id=<span class="st0">&quot;infoButton&quot;</span> <span class="kw3">width</span>=<span class="st0">&quot;100&quot;</span> <span class="kw3">height</span>=<span class="st0">&quot;50&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;mx:<span class="kw3">Button</span> label=<span class="st0">&quot;error&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; click=<span class="st0">&quot;traceToFirebug(event);&quot;</span> id=<span class="st0">&quot;errorButton&quot;</span> <span class="kw3">width</span>=<span class="st0">&quot;100&quot;</span> <span class="kw3">height</span>=<span class="st0">&quot;50&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;mx:<span class="kw3">Button</span> label=<span class="st0">&quot;warn&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; click=<span class="st0">&quot;traceToFirebug(event);&quot;</span> id=<span class="st0">&quot;warnButton&quot;</span> <span class="kw3">width</span>=<span class="st0">&quot;100&quot;</span> <span class="kw3">height</span>=<span class="st0">&quot;50&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &lt;mx:<span class="kw3">Button</span> label=<span class="st0">&quot;debug&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; click=<span class="st0">&quot;traceToFirebug(event);&quot;</span> id=<span class="st0">&quot;debugButton&quot;</span> <span class="kw3">width</span>=<span class="st0">&quot;100&quot;</span> <span class="kw3">height</span>=<span class="st0">&quot;50&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;/mx:HBox&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;/mx:Application&gt;</div>
</li>
</ol>
</div>
</phpcode>
<h2>Source</h2>
<p>First of all: Feel free to check out the <a href="http://code.google.com/p/flash-thunderbolt/source">latest source</a> via SVN <img src='http://www.websector.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  .</p>
<phpcode>
<div class="codeHeadlineBox">
<p>Logger.as ( <a href="http://www.websector.de/blog/wp-content/uploads/2007/04/21/Logger.as">Download code</a> )</p>
</div>
<div class="actionscript" style="font-family: monospace;">
<ol>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">* Logging Flex and AS3 projects with Firebug</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">*</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">* @author&nbsp; &nbsp;Jens Krause [www.websector.de]</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">* @date&nbsp; 04/21/07</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">* @see&nbsp; http://www.websector.de/blog/2007/04/21/logging-flex-2-and-as-3-apps-with-firebug-and-thunderbolt/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">* @source&nbsp; &nbsp;http://flash-thunderbolt.googlecode.com/svn/trunk/as3/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">*</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">*/</span></div>
</li>
<li class="li1">
<div class="de1">package org.<span class="me1">osflash</span>.<span class="me1">thunderbolt</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">external</span>.<span class="me1">ExternalInterface</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">utils</span>.<span class="me1">describeType</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">utils</span>.<span class="me1">getQualifiedClassName</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">utils</span>.<span class="me1">getDefinitionByName</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; *</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; */</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">class</span> Logger</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const <span class="kw3">LOG</span>: <span class="kw3">String</span> = <span class="st0">&quot;log&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const INFO: <span class="kw3">String</span> = <span class="st0">&quot;info&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const WARN: <span class="kw3">String</span> = <span class="st0">&quot;warn&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const <span class="kw3">ERROR</span>: <span class="kw3">String</span> = <span class="st0">&quot;error&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> const MAX_DEPTH: <span class="kw3">int</span> = <span class="nu0">255</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">var</span> depth: <span class="kw3">int</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">var</span> logLevel: <span class="kw3">String</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * Calls Firebugs command line API to write log information</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; *</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param&nbsp; &nbsp;msg&nbsp;&nbsp; log Message</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param&nbsp; &nbsp;obj&nbsp;&nbsp; log object</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> <span class="kw2">function</span> <span class="kw3">trace</span> <span class="br0">&#40;</span>msg: <span class="kw3">String</span> = <span class="kw2">null</span>, obj:<span class="kw3">Object</span> = <span class="kw2">null</span><span class="br0">&#41;</span>: <span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; depth = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// log description</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; logLevel = <span class="br0">&#40;</span>msg != <span class="kw2">null</span><span class="br0">&#41;</span> ? Logger.<span class="me1">getLogLevel</span><span class="br0">&#40;</span>msg<span class="br0">&#41;</span> : Logger.<span class="kw3">LOG</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> txtMessage: <span class="kw3">String</span> = <span class="br0">&#40;</span>msg != <span class="kw2">null</span> &amp;&amp; msg.<span class="me1">length</span>&gt;= <span class="nu0">3</span><span class="br0">&#41;</span> ? msg.<span class="kw3">slice</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span> : <span class="st0">&quot;&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> logMsg: <span class="kw3">String</span> = logLevel.<span class="kw3">toUpperCase</span><span class="br0">&#40;</span><span class="br0">&#41;</span> + <span class="st0">&quot;: &quot;</span> + txtMessage;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ExternalInterface.<span class="kw3">call</span><span class="br0">&#40;</span><span class="st0">&quot;console.&quot;</span> + logLevel, logMsg<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// log object</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>obj<span class="br0">&#41;</span> Logger.<span class="me1">logProperties</span><span class="br0">&#40;</span>obj<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * Logs nested instances and properties</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; *</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param&nbsp; &nbsp;logObj&nbsp; log object</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param&nbsp; &nbsp;id&nbsp; &nbsp; short description of log object</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">function</span> logProperties <span class="br0">&#40;</span>logObj: *, id: <span class="kw3">String</span> = <span class="kw2">null</span><span class="br0">&#41;</span>: <span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ++ depth;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> propID: <span class="kw3">String</span> = id || <span class="st0">&quot;&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>depth &lt;Logger.<span class="me1">MAX_DEPTH</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> description:<span class="kw3">XML</span> = describeType<span class="br0">&#40;</span>logObj<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> <span class="kw3">type</span>: <span class="kw3">String</span> = description.@<span class="kw3">name</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>primitiveType<span class="br0">&#40;</span><span class="kw3">type</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> msg: <span class="kw3">String</span> = <span class="br0">&#40;</span>propID.<span class="kw3">length</span><span class="br0">&#41;</span>&nbsp; &nbsp;?&nbsp; &nbsp; <span class="st0">&quot;[&quot;</span> + <span class="kw3">type</span> + <span class="st0">&quot;] &quot;</span> + propID + <span class="st0">&quot; = &quot;</span> + logObj</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :&nbsp; &nbsp;<span class="st0">&quot;[&quot;</span> + <span class="kw3">type</span> + <span class="st0">&quot;] &quot;</span> + logObj;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ExternalInterface.<span class="kw3">call</span><span class="br0">&#40;</span><span class="st0">&quot;console.&quot;</span> + Logger.<span class="kw3">LOG</span>, msg<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">type</span> == <span class="st0">&quot;Object&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ExternalInterface.<span class="kw3">call</span><span class="br0">&#40;</span><span class="st0">&quot;console.group&quot;</span>, <span class="st0">&quot;[Object] &quot;</span> + propID<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> element: <span class="kw3">String</span> <span class="kw1">in</span> logObj<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;logProperties<span class="br0">&#40;</span>logObj<span class="br0">&#91;</span>element<span class="br0">&#93;</span>, element<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ExternalInterface.<span class="kw3">call</span><span class="br0">&#40;</span><span class="st0">&quot;console.groupEnd&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">type</span> == <span class="st0">&quot;Array&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ExternalInterface.<span class="kw3">call</span><span class="br0">&#40;</span><span class="st0">&quot;console.group&quot;</span>, <span class="st0">&quot;[Array] &quot;</span> + propID<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i: <span class="kw3">int</span> = <span class="nu0">0</span>; i &lt;logObj.<span class="kw3">length</span>; i++<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;logProperties<span class="br0">&#40;</span>logObj<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ExternalInterface.<span class="kw3">call</span><span class="br0">&#40;</span><span class="st0">&quot;console.groupEnd&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> <span class="kw3">list</span>: XMLList = description..<span class="kw3">variable</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">list</span>.<span class="kw3">length</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> each<span class="br0">&#40;</span><span class="kw2">var</span> item: <span class="kw3">XML</span> <span class="kw1">in</span> <span class="kw3">list</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> propItem: <span class="kw3">String</span> = item.@<span class="kw3">name</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> typeItem: <span class="kw3">String</span> = item.@<span class="kw3">type</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// var ClassReference: Class = getDefinitionByName(typeItem) as Class;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> valueItem: * = logObj<span class="br0">&#91;</span>propItem<span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; logProperties<span class="br0">&#40;</span>valueItem, propItem<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; logProperties<span class="br0">&#40;</span>logObj, <span class="kw3">type</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ExternalInterface.<span class="kw3">call</span><span class="br0">&#40;</span><span class="st0">&quot;console.&quot;</span> + Logger.<span class="me1">WARN</span>, <span class="st0">&quot;STOP LOGGING: More than &quot;</span> + depth + <span class="st0">&quot; nested objects or properties&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * Checking for primitive types</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; *</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param&nbsp; &nbsp;type&nbsp; &nbsp; &nbsp; &nbsp; type of object</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @return&nbsp; isPrimitiveType&nbsp; isPrimitiveType</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; *</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">function</span> primitiveType <span class="br0">&#40;</span><span class="kw3">type</span>: <span class="kw3">String</span><span class="br0">&#41;</span>: <span class="kw3">Boolean</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> isPrimitiveType: <span class="kw3">Boolean</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">switch</span> <span class="br0">&#40;</span><span class="kw3">type</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;Boolean&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isPrimitiveType = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;void&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isPrimitiveType = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;int&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isPrimitiveType = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;uint&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isPrimitiveType = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;Number&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isPrimitiveType = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;String&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isPrimitiveType = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;undefined&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isPrimitiveType = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;null&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isPrimitiveType = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">default</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isPrimitiveType = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> isPrimitiveType;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * Translates log keys to Firebug log levels,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * which based on zeroi&#8217;s key mapping</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @see&nbsp; http://www.osflash.org/zeroi/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; *</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param&nbsp; &nbsp;msg</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @return&nbsp; level description</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; *</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">function</span> getLogLevel <span class="br0">&#40;</span>msg: <span class="kw3">String</span><span class="br0">&#41;</span>: <span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> firstChar: <span class="kw3">String</span> = <span class="br0">&#40;</span>msg.<span class="kw3">charAt</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span> == <span class="st0">&quot; &quot;</span><span class="br0">&#41;</span> ? msg.<span class="kw3">charAt</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>.<span class="kw3">toLowerCase</span><span class="br0">&#40;</span><span class="br0">&#41;</span> : <span class="st0">&quot;d&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> <span class="kw3">level</span>: <span class="kw3">String</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">switch</span> <span class="br0">&#40;</span>firstChar<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;i&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">level</span> = Logger.<span class="me1">INFO</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;w&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">level</span> = Logger.<span class="me1">WARN</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;e&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">level</span> = Logger.<span class="kw3">ERROR</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;d&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">level</span> = Logger.<span class="kw3">LOG</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">default</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">level</span> = Logger.<span class="kw3">LOG</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw3">level</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
</phpcode>
<h2>Feedback</h2>
<p>Feedback and suggestions for improvement are welcome <img src='http://www.websector.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  If you&#8217;d like to join the <a href="http://code.google.com/p/flash-thunderbolt/">Flash-ThunderBolt project</a> just drop <a href="mailto:sectore@gmail.com">me an email</a> or feel free to post a comment.</p>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://www.websector.de/blog/2007/04/21/logging-flex-2-and-as-3-apps-with-firebug-and-thunderbolt/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Extension for Zeroi: XTracePublisher</title>
		<link>http://www.websector.de/blog/2007/03/12/extension-for-zeroi-xtracepublisher/</link>
		<comments>http://www.websector.de/blog/2007/03/12/extension-for-zeroi-xtracepublisher/#comments</comments>
		<pubDate>Mon, 12 Mar 2007 03:30:00 +0000</pubDate>
		<dc:creator>sectore</dc:creator>
				<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[MTASC]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://www.websector.de/blog/2007/03/12/extension-for-zeroi-xtracepublisher/</guid>
		<description><![CDATA[Xtrace is a popular debugger console on OS X for logging your trace() data outside the Flash IDE. For easier handling I decided to write an extension for Zeroi that keeps your standard trace() methods in your code. Here is a screen of a XTrace window receiving Zerois debug messages: Instructions Grab the latest source [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://developer.mabwebdesign.com/xtrace.html">Xtrace</a> is a popular debugger console on OS X for logging your <code>trace()</code> data outside the Flash IDE. For easier handling I decided to write an extension for <a href="http://osflash.org/Zeroi">Zeroi</a> that keeps your standard <code>trace()</code> methods in your code.</p>
<p><span id="more-18"></span></p>
<p>Here is a screen of a XTrace window receiving Zerois debug messages:</p>
<p><img src="http://www.websector.de/blog/wp-content/uploads/2007/03/xtrace-window.png" alt="XTrace Window" /></p>
<h2>Instructions</h2>
<ol>
<li>Grab the latest source of Zeroi from its <a href="http://code.google.com/p/zeroi/source">Subversion Repository</a>. You will find there the new extension for XTrace, too.</li>
<li>Download and install <a href="http://developer.mabwebdesign.com/xtrace.html">XTrace</a>. For enjoying the latest features (e.g. text highlighting) it&#8217;s recommended to use the <a href="http://svn.mabwebdesign.com/xtrace">XTrace SVN Repository</a>.</li>
<li>Download the <a href="http://www.websector.de/blog/download-manager.php?id=1">Zeroi example</a> and follow the steps 4 up to 7 described in my previous post called <a href="http://www.websector.de/blog/2007/03/04/debugging-with-mtasc-ant-and-zeroi/">&#8220;Debugging with MTASC, Ant and Zeroi&#8221;</a>.</li>
<li>Add <em>XTracePublisher</em> as Zerois publisher to MTASC <code>-trace</code> flag. For this purpose you have to change only one line in the Ant script located in my example:
<phpcode>
<div class="actionscript" style="font-family: monospace;">
<ol>
<li class="li1">
<div class="de1">&lt;arg value=<span class="st0">&quot;-trace&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;arg value=<span class="st0">&quot;org.osflash.Zeroi.logging.LoggerClass.log&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;arg value=<span class="st0">&quot;org/osflash/Zeroi/logging/LoggerClass&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;!&#8211; point <span class="kw3">this</span> argument to XTracePublisher &#8211;&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;arg value=<span class="st0">&quot;org/osflash/Zeroi/logging/publisher/XTracePublisher&quot;</span>/&gt;</div>
</li>
</ol>
</div>
</phpcode>
	</li>
<li>If you familiar with Terminal you can also create a small shell script to run MTASC instead using Ant. Open Terminal, change directory<br />
<code>cd {path/to/downloaded/zeroiExample}</code><br />
and create a new file named <em>build</em><code>pico ./build</code></p>
<p>Type then the following line for running MTASC:</p>
<phpcode>
<div class="actionscript" style="font-family: monospace;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span>path/to/mtasc<span class="br0">&#125;</span> -cp <span class="br0">&#123;</span>path/to/your/own/core/classes<span class="br0">&#125;</span> -cp <span class="br0">&#123;</span>path/to/MM/core/classes<span class="br0">&#125;</span> -cp <span class="br0">&#123;</span>path/to/zeroi/<span class="kw2">class</span>/package<span class="br0">&#125;</span> -cp ./source/ -swf ./deploy/zeroiExample.<span class="me1">swf</span> ./ZeroiExample.<span class="me1">as</span> -<span class="kw3">trace</span> org.<span class="me1">osflash</span>.<span class="me1">Zeroi</span>.<span class="me1">logging</span>.<span class="me1">LoggerClass</span>.<span class="kw3">log</span> org/osflash/Zeroi/logging/LoggerClass org/osflash/Zeroi/logging/publisher/XTracePublisher -frame <span class="nu0">1</span> -<span class="kw3">version</span> <span class="nu0">7</span> -v -main</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
</phpcode>
For opening the *.swf with the FlashPlayer type additionally:</p>
<phpcode>
<div class="actionscript" style="font-family: monospace;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">open -a SAFlashPlayer ./deploy/zeroiExample.<span class="me1">swf</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
</phpcode>
<p>Save the file, close pico and run the script typing <code>./build</code></li>
</ol>
<h2>Wish list</h2>
<ul>
<li>Adding more log levels, such as &#8220;INFO&#8221; and &#8220;FATAL&#8221;. I&#8217;ve got in contact with <a href="http://developer.mabwebdesign.com/about.html">Michael Bianco</a> <img src='http://www.websector.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  .</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.websector.de/blog/2007/03/12/extension-for-zeroi-xtracepublisher/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Debugging with MTASC, Ant and Zeroi</title>
		<link>http://www.websector.de/blog/2007/03/04/debugging-with-mtasc-ant-and-zeroi/</link>
		<comments>http://www.websector.de/blog/2007/03/04/debugging-with-mtasc-ant-and-zeroi/#comments</comments>
		<pubDate>Sun, 04 Mar 2007 18:43:30 +0000</pubDate>
		<dc:creator>sectore</dc:creator>
				<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[MTASC]]></category>

		<guid isPermaLink="false">http://www.websector.de/blog/2007/03/04/debugging-with-mtasc-ant-and-zeroi/</guid>
		<description><![CDATA[In my previous posts &#8220;trace() outside the Flash IDE with tail&#8221; and &#8220;Are you looking for AFTERTHOUGHT on OS X?&#8221; I described two similar ways for debugging Flash movies outside the Flash IDE. In fact, it&#8217;s relatively simple to use the Flash Debug Player in connection with the logging file called flashlog.txt but it has [...]]]></description>
			<content:encoded><![CDATA[<p>In my previous posts <a href="http://www.websector.de/blog/2007/02/21/are-you-looking-for-afterthought-on-os-x/">&#8220;trace() outside the Flash IDE with tail&#8221;</a> and <a href="http://www.websector.de/blog/2007/02/21/are-you-looking-for-afterthought-on-os-x/">&#8220;Are you looking for AFTERTHOUGHT on OS X?&#8221;</a> I described two similar ways for debugging Flash movies outside the Flash IDE. In fact, it&#8217;s relatively simple to use the Flash Debug Player in connection with the logging file called <em>flashlog.txt</em> but it has only got one big disadvantage: Instead of outputting structured data in predetermined levels you&#8217;ll get tons of unstructured lines.</p>
<p><span id="more-16"></span></p>
<h2>Introduction</h2>
<p>A couple of weeks ago, I did <a href="http://www.bmw.com/com/en/index_highend.html?prm_content=../../com/en/newvehicles/x5/x5/2006/experience/phase_3/_highend/xml/experience.xml">this project</a> on a team with <a href="http://soenkerohde.com/">Sönke Rohde</a>. He showed me a better way for debugging Flash movies using <a href="http://osflash.org/zeroi">Zeroi</a> developed by himself and <a href="http://www.helpqlodhelp.com/blog/">Ralf Bokelberg</a>. Zeroi is a package of classes that supports MTASC&#8217;s option for <a href="http://www.mtasc.org/#trace">customizing trace() functions</a> and the implementation of different log levels without changing code of your Flash application. You can use it with different debugging tools such as <a href="http://sos.powerflasher.de/">SOS</a>, <a href="http://osflash.org/xray">X-Ray</a> or <a href="http://www.luminicbox.com/blog/default.aspx?page=post&#038;id=2">LuminicBox.Log</a>. One of the most important feature is its ability to broadcast debug messages including additional information about class name, method name, line number and a error level with a standard <code>trace()</code> method.</p>
<p>For example: <code>trace("i This is my message");</code> will be displayed as <code>MyClass::myMethod Line>> This is my message</code>. Additionally, you can add a character for an error level <code>d = debug, i = info, w = warn, e = error, f = fatal</code>.</p>
<h2>Example</h2>
</p>
<p>Click the buttons below to view the different debug messages.</p>
<div id="zeroiExample" width="500" height="45">
<p>The movie requires the latest <a href="http://www.macromedia.com/go/getflashplayer">Flash Player</a>.</p>
</div>
<p><script type="text/javascript">
   var so2 = new SWFObject("http://www.websector.de/blog/wp-content/uploads/2007/03/zeroiExample.swf", "zeroiExample", "500", "45", "7", "#FFF");
   so2.addParam("quality", "best");
   so2.write("zeroiExample");
</script></p>
<p>In this example the <a href="http://www.luminicbox.com/blog/default.aspx?page=post&#038;id=2">LuminicBox.Log</a> is used as a debugger console. Open the LuminicBox.Log only once.</p>
<div id="flashinspector" width="500" height="300">
<p>The movie requires the latest <a href="http://www.macromedia.com/go/getflashplayer">Flash Player</a>.</p>
</div>
<p><script type="text/javascript">
   var so = new SWFObject("http://www.websector.de/blog/wp-content/uploads/2007/03/FlashInspector.swf", "flashinspector", "500", "300", "7", "#06324D");
   so.addParam("quality", "best");
   so.write("flashinspector");
</script></p>
<p>Have a look inside the main class named <em>ZeroiExample.as</em>. It includes only standard <code>trace()</code> methods.</p>
<phpcode>
<div class="codeHeadlineBox">
<p>ZeroiExample.as ( <a href="http://www.websector.de/blog/wp-content/uploads/2007/03/04/ZeroiExample.as">Download code</a> )</p>
</div>
<div class="actionscript" style="font-family: monospace;">
<ol>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">* ZeroiExample</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">* @author Jens Krause [www.websector.de]</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">*/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">import</span> mx.<span class="me1">utils</span>.<span class="me1">Delegate</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> ZeroiExample</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">var</span> example: ZeroiExample = <span class="kw2">null</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> __timeline: <span class="kw3">MovieClip</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">function</span> ZeroiExample<span class="br0">&#40;</span>t: <span class="kw3">MovieClip</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">trace</span> <span class="br0">&#40;</span><span class="st0">&quot;i instance of ZeroiExample created&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; __timeline = t;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; initButtons<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> initButtons <span class="br0">&#40;</span><span class="br0">&#41;</span>: <span class="kw3">Void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> labels: <span class="kw3">Array</span> = <span class="br0">&#91;</span><span class="st0">&quot;debug&quot;</span>, <span class="st0">&quot;info&quot;</span>, <span class="st0">&quot;warn&quot;</span>, <span class="st0">&quot;error&quot;</span>, <span class="st0">&quot;fatal&quot;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i : <span class="kw3">Number</span> = <span class="nu0">0</span>; i &lt;labels.<span class="kw3">length</span>; i++<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> <span class="kw3">button</span>: <span class="kw3">MovieClip</span> = __timeline.<span class="kw3">attachMovie</span><span class="br0">&#40;</span><span class="st0">&quot;button&quot;</span>, <span class="st0">&quot;button&quot;</span> + i, __timeline.<span class="kw3">getNextHighestDepth</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, <span class="br0">&#123;</span>id: i, <span class="kw3">_x</span>: i*<span class="nu0">100</span>, <span class="kw3">_y</span>: <span class="nu0">30</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">button</span>.<span class="me1">label</span>.<span class="kw3">text</span> = labels<span class="br0">&#91;</span>i<span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">button</span>.<span class="kw3">onPress</span> = <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> ZeroiExample.<span class="me1">instance</span>.<span class="me1">traceExamples</span><span class="br0">&#40;</span><span class="kw3">this</span>.<span class="me1">id</span><span class="br0">&#41;</span>; <span class="br0">&#125;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> traceExamples <span class="br0">&#40;</span>$id: <span class="kw3">Number</span><span class="br0">&#41;</span>: <span class="kw3">Void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">switch</span> <span class="br0">&#40;</span>$id<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="nu0">0</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// this is a debug message</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">trace</span> <span class="br0">&#40;</span><span class="st0">&quot;d buttons id =&gt; &quot;</span> + $id<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="nu0">1</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// this is an info message</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">trace</span> <span class="br0">&#40;</span><span class="st0">&quot;i buttons id =&gt; &quot;</span> + $id<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="nu0">2</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// this is a warn message</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">trace</span> <span class="br0">&#40;</span><span class="st0">&quot;w buttons id =&gt; &quot;</span> + $id<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="nu0">3</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// this is an error message</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">trace</span> <span class="br0">&#40;</span><span class="st0">&quot;e buttons id =&gt; &quot;</span> + $id<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="nu0">4</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// this is an fatal message</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">trace</span> <span class="br0">&#40;</span><span class="st0">&quot;f buttons id =&gt; &quot;</span> + $id<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">default</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">trace</span> <span class="br0">&#40;</span><span class="st0">&quot;w $id has&#8217;nt defined&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> <span class="kw2">function</span> main <span class="br0">&#40;</span>t: <span class="kw3">MovieClip</span><span class="br0">&#41;</span> : <span class="kw3">Void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>ZeroiExample.<span class="me1">example</span> == <span class="kw2">null</span><span class="br0">&#41;</span> ZeroiExample.<span class="me1">example</span> = <span class="kw2">new</span> ZeroiExample<span class="br0">&#40;</span>t<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
</phpcode>
<p>For creating the example above I&#8217;ve used the following Ant script. In the next chapter I&#8217;ll give you detailed instructions to use Zeroi with Ant.</p>
<phpcode>
<div class="codeHeadlineBox">
<p>build.xml ( <a href="http://www.websector.de/blog/wp-content/uploads/2007/03/04/build.xml">Download code</a> )</p>
</div>
<div class="actionscript" style="font-family: monospace;">
<ol>
<li class="li1">
<div class="de1">&lt;?<span class="kw3">xml</span> <span class="kw3">version</span>=<span class="st0">&#8217;1.0&#8242;</span> encoding=<span class="st0">&quot;utf-8&quot;</span>?&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;project <span class="kw3">name</span>=<span class="st0">&quot;zeroi example&quot;</span> <span class="kw2">default</span>=<span class="st0">&quot;run&quot;</span> basedir=<span class="st0">&quot;.&quot;</span>&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;description&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; buildfile <span class="kw1">for</span> zeroi<span class="st0">&#8216;s example</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&nbsp; &nbsp; &lt;/description&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&nbsp; &nbsp; &lt;target name=&quot;deploy&quot; description=&quot;Compiles an existing SWF file with MTASC for debugging&quot;&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&nbsp; &nbsp; &nbsp; &nbsp; &lt;!&#8211; defines ant properties, you&#8217;</span>ll find more properties <span class="kw1">in</span> <span class="st0">&quot;build.jk.properties&quot;</span> &#8211;&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;property <span class="kw3">name</span>=<span class="st0">&quot;targetswf&quot;</span> value=<span class="st0">&quot;zeroiExample.swf&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;property <span class="kw3">name</span>=<span class="st0">&quot;mainclass&quot;</span> value=<span class="st0">&quot;ZeroiExample.as&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;property <span class="kw3">name</span>=<span class="st0">&quot;classframe&quot;</span> value=<span class="st0">&quot;1&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;property <span class="kw3">name</span>=<span class="st0">&quot;version&quot;</span> value=<span class="st0">&quot;7&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;exec executable=<span class="st0">&quot;${mtasc}&quot;</span> failonerror=<span class="st0">&quot;true&quot;</span>&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;!&#8211; runs mtasc adding following <span class="kw3">arguments</span> &#8211;&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;arg value=<span class="st0">&quot;-version&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;arg value=<span class="st0">&quot;${version}&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;arg value=<span class="st0">&quot;-cp&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;arg value=<span class="st0">&quot;${content.classpath}&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;arg value=<span class="st0">&quot;-cp&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;arg value=<span class="st0">&quot;${zeroi.classpath}&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;arg value=<span class="st0">&quot;-cp&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;arg value=<span class="st0">&quot;${core.classpath}&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;arg value=<span class="st0">&quot;-swf&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;arg value=<span class="st0">&quot;${deploy.folder}/${targetswf}&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;arg value=<span class="st0">&quot;-frame&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;arg value=<span class="st0">&quot;${classframe}&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;arg value=<span class="st0">&quot;-main&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;arg value=<span class="st0">&quot;${content.classpath}/${mainclass}&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;!&#8211; adds zeroi<span class="st0">&#8216;s trace functions &#8211;&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;arg value=&quot;-trace&quot;/&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;arg value=&quot;org.osflash.zeroi.logging.LoggerClass.log&quot;/&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;arg value=&quot;org/osflash/zeroi/logging/LoggerClass&quot;/&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;arg value=&quot;org/osflash/zeroi/logging/publisher/LuminicPublisher&quot;/&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/exec&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&nbsp; &nbsp; &nbsp; &nbsp; &lt;/target&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&nbsp; &nbsp; &lt;target name=&quot;run&quot; depends=&quot;deploy&quot; description=&quot;opens SWF&quot;&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&nbsp; &nbsp; &nbsp; &nbsp; &lt;!&#8211; opens the *.swf with the Flash Player (Standalone) &#8211;&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&nbsp; &nbsp; &nbsp; &nbsp; &lt;!&#8211; Note: The following command is for OS X users only, it won&#8217;</span>t run <span class="kw3">on</span> windows &#8211;&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;exec executable=<span class="st0">&quot;open&quot;</span> dir=<span class="st0">&quot;.&quot;</span>&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;arg line=<span class="st0">&quot;-a ${flashplayer.v9} ${deploy.folder}/${targetswf}&quot;</span> /&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;/exec&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;/target&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;/project&gt;</div>
</li>
</ol>
</div>
</phpcode>
<h2>Instructions</h2>
<p>All you need are <a href="http://www.mtasc.org/">MTASC</a>, a debugger tool described above, <a href="http://ant.apache.org/">Ant</a> and the <a href="http://osflash.org/zeroi#download">Zeroi package</a>. It&#8217;s recommend to use <a href="http://www.eclipse.org">Eclipse</a> and <a href="http://fdt.powerflasher.com">FDT</a> as well.</p>
<ol>
<li><a href="http://www.websector.de/blog/?download=zeroiExample">Download the Zeroi example</a> and unzip the file.</li>
<li>Grab the latest <a href="http://osflash.org/zeroi#download">Zeroi package</a> and unzip the file.</li>
<li>For this example you&#8217;ll need the LuminicBox.Log, too. <a href="http://www.luminicbox.com/blog/default.aspx?page=post&#038;id=2">Download</a> and open it.<br /><strong>Note:</strong> Open the LuminicBox.Log only once.</li>
<li>Make sure, that you have installed MTASC successfully as described on <a href="http://www.mtasc.org/#install">mtasc.org</a>. If you&#8217;re on a Mac (PPC or Intel), you&#8217;ll find the latest binaries (v.1.13) on <a href="http://lists.motion-twin.com/pipermail/mtasc/2007-February/030170.html">MTASC&#8217;s mailing list</a>.</li>
<li>Open Eclipse, create a new Flash Project <em>File -> New -> New Flash Project</em> and link it to the folder &#8220;Zeroi example&#8221;: First you have to uncheck <em>&#8220;use default location&#8221;</em>. Secondly, browse to the folder where the downloaded example is located.</li>
<li>Customize the property values in <em>build.jk.properties</em> and add this file to Ant&#8217;s Preferences on Eclipse: <em>Preferences -> Type &#8220;Runtime&#8221; in the search field -> Properties -> Add Files</em><br /><strong>Note:</strong> Windows users have to change the target called &#8220;run&#8221; located in the <em>build.xml</em> as well. At present, it only runs on OS X. If there&#8217;s anyone out there who&#8217;s familiar with Ant on windows, feel free to post a comment for this issue.</li>
<li>On Eclipse open the Ant view <em>Window -> Show view -> Ant</em>, drag the <em>build.xml</em> located in the Flash Explorer to its Ant view and press the green button to run the script.
<p><img src="http://www.websector.de/blog/wp-content/uploads/2007/03/eclipse-ant-view.png" alt="Eclipse Ant View" height="408" width="359"/></p>
</li>
<li>If you use other debugger tools, you&#8217;ll only have to change one line located in <em>build.xml</em>
<phpcode>
<div class="actionscript" style="font-family: monospace;">
<ol>
<li class="li1">
<div class="de1"><span class="co1">// using XRay</span></div>
</li>
<li class="li1">
<div class="de1">&lt;arg value=<span class="st0">&quot;org/osflash/zeroi/logging/publisher/XRayPublisher&quot;</span>/&gt;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// OR</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// using SOS</span></div>
</li>
<li class="li1">
<div class="de1">&lt;arg value=<span class="st0">&quot;org/osflash/zeroi/logging/publisher/SOSPublisher&quot;</span>/&gt;</div>
</li>
</ol>
</div>
</phpcode></li>
</ol>
<p>Happy debugging <img src='http://www.websector.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.websector.de/blog/2007/03/04/debugging-with-mtasc-ant-and-zeroi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Are you looking for AFTERTHOUGHT on OS X?</title>
		<link>http://www.websector.de/blog/2007/02/21/are-you-looking-for-afterthought-on-os-x/</link>
		<comments>http://www.websector.de/blog/2007/02/21/are-you-looking-for-afterthought-on-os-x/#comments</comments>
		<pubDate>Wed, 21 Feb 2007 18:40:44 +0000</pubDate>
		<dc:creator>sectore</dc:creator>
				<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://www.websector.de/blog/2007/02/21/are-you-looking-for-afterthought-on-os-x/</guid>
		<description><![CDATA[AFTERTHOUGHT is an amazing tool for debugging Flash movies, but it runs only on Windows and it needs .NET runtime. It seems that a Mac version will be available soon but you won&#8217;t need it. Because OS X provides a suite of developer tools such as Console which you can view the message logs of [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://broadcast.artificialcolors.com/index.php?title=afterthought_2_1_now_with_search">AFTERTHOUGHT</a> is an amazing tool for debugging Flash movies, but it runs only on Windows and it needs .NET runtime. It seems that a <a href="http://broadcast.artificialcolors.com/index.php?title=afterthought_on_osx">Mac version</a> will be available soon but you won&#8217;t need it. Because OS X provides a suite of developer tools such as Console which you can view the message logs of your Flash Debug Player in real time as well. If you are familiar with Terminal, you&#8217;ll optimize your debugging session as <a href="http://www.dirtystylus.com/blog/">Mark Llobrera</a> commented on <a href="http://www.digitalflipbook.com/archives/2005/07/trace_from_the.php">Mark Walters&#8217; Blog</a>.</p>
<p><span id="more-14"></span></p>
<p>Configure your system as follows:</p>
<ol>
<li>Install and configure the Flash Debug Player as described in my previous article <a href="http://www.websector.de/blog/2007/02/20/trace-outside-the-flash-ide-with-tail/">&#8220;trace() outside the Flash IDE with tail&#8221;</a>. Follow the steps 1 up to 3 from there.</li>
<li>Start up a Terminal window and change the directory: <code>cd  /Users/</code></li>
<li>Type <code>pico .bash_profile</code> to open Pico and add two aliases named <code>trace</code> and <code>cleartrace</code> inside your <em>.bash_profile</em> located in <em>/Users/[username]/</em>
<pre># opens "flashlog.txt" in Console
alias trace='open -a /Applications/Utilities/Console.app/ /Users/[username]]/Library/Preferences/Macromedia/Flash\ Player/Logs/flashlog.txt'
# clears "flashlog.txt"
alias cleartrace='cat /dev/null > /Users/[username]/Library/Preferences/Macromedia/Flash\ Player/Logs/flashlog.txt'</pre>
</li>
<li>Save your <em>.bash_profile</em>, close pico and the shell. </li>
<li>Open a new shell and type <code>trace</code>. The <em>&#8220;flashlog.txt&#8221;</em> will be opened in Console and will be logged in run time. For searching log messages type a word or phrase in the Filter field.
<p>			<img src="http://www.websector.de/blog/wp-content/uploads/2007/02/screen-console.png" alt="Screen Console" height="277" width="519"/></p>
<p>			For clearing the <em>&#8220;flashlog.txt&#8221;</em> type <code>cleartrace</code>.</li>
</ol>
<p>Happy debugging <img src='http://www.websector.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.websector.de/blog/2007/02/21/are-you-looking-for-afterthought-on-os-x/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

