package { import flash.utils.*; import flash.display.*; import flash.system.LoaderContext; import flash.events.*; public class Job { private var callback; private var id:int; private var name:String; private var input:ByteArray; private var details; private var inputLoader:Loader = null; public function GetID():int { return this.id; } public function Job(id:int, name:String, input:ByteArray, details) { this.id = id; this.name = name; this.input = input; this.details = details; Exporter.Instance.Trace("new job: " + id); } private function Fail(err:String) { Exporter.Instance.Print("Failure: job " + id + ": " + err); callback(); } public function Go(callback) { this.callback = callback; if (this.input == null) { Fail("contained no input"); return; } inputLoader = new Loader(); inputLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, LoaderComplete); inputLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, LoaderError); inputLoader.loadBytes(input, new LoaderContext()); } private function LoaderComplete(e) { try { var classDef = e.target.applicationDomain.getDefinition(name); if (classDef == null) { Fail("didn't contain a definition for " + name); return; } var clip = new classDef(); if (!(clip is MovieClip)) { Fail(name + " wasn't a movieclip"); } Utils.RecursivelyStop(clip); Done(); } catch (e) { Exporter.Instance.Print(e.getStackTrace()); } } private function LoaderError(e) { Fail("couldn't load input: " + e.toString()); } public function Done() { Exporter.Instance.Trace("Job.Done() " + id); this.callback(); } public function GetCompletedData() { return {id:id}; } } }