diff --git a/Exporter.as b/Exporter.as index 45552d3..5adf9dc 100644 --- a/Exporter.as +++ b/Exporter.as @@ -50,6 +50,7 @@ var s:Socket = new Socket(); s.addEventListener(IOErrorEvent.IO_ERROR, DriverError); s.addEventListener(Event.CONNECT, DriverConnected); + s.addEventListener(Event.CLOSE, DriverClosed); s.connect("localhost", port); } catch (e) @@ -58,6 +59,11 @@ } } + private function DriverClosed(e) + { + Quit(); + } + private function DriverError(e) { Trace(" Failed to connect"); @@ -85,13 +91,7 @@ private var jobQueue:Array = new Array(); private var activeJob:Job = null; private function QueueJob(jobParams) - { - var input:ByteArray = null; - if (jobParams.hasOwnProperty("input")) - { - input = Base64.decode("" + jobParams.input); - } - + { if (!jobParams.hasOwnProperty("id")) { Print("Failure: job details didn't contain job id"); @@ -100,19 +100,19 @@ } var id:int = parseInt(jobParams.id); - if (!jobParams.hasOwnProperty("name")) + if (!jobParams.hasOwnProperty("graphics") || getQualifiedClassName(jobParams.graphics) != "Array") { - Print("Failure: job " + id + " details didn't contain job name"); + Print("Failure: job " + id + " details didn't contain graphics array"); JobFailed(id); return; } - var name:String = "" + jobParams.name; + var graphicsDetails:Array = jobParams.graphics; delete jobParams.command; - delete jobParams.input; delete jobParams.id; + delete jobParams.graphics; - var job:Job = new Job(id, name, input, jobParams); + var job:Job = new Job(id, graphicsDetails); jobQueue.push(job); CheckNewJob(); } diff --git a/Exporter.as b/Exporter.as index 45552d3..5adf9dc 100644 --- a/Exporter.as +++ b/Exporter.as @@ -50,6 +50,7 @@ var s:Socket = new Socket(); s.addEventListener(IOErrorEvent.IO_ERROR, DriverError); s.addEventListener(Event.CONNECT, DriverConnected); + s.addEventListener(Event.CLOSE, DriverClosed); s.connect("localhost", port); } catch (e) @@ -58,6 +59,11 @@ } } + private function DriverClosed(e) + { + Quit(); + } + private function DriverError(e) { Trace(" Failed to connect"); @@ -85,13 +91,7 @@ private var jobQueue:Array = new Array(); private var activeJob:Job = null; private function QueueJob(jobParams) - { - var input:ByteArray = null; - if (jobParams.hasOwnProperty("input")) - { - input = Base64.decode("" + jobParams.input); - } - + { if (!jobParams.hasOwnProperty("id")) { Print("Failure: job details didn't contain job id"); @@ -100,19 +100,19 @@ } var id:int = parseInt(jobParams.id); - if (!jobParams.hasOwnProperty("name")) + if (!jobParams.hasOwnProperty("graphics") || getQualifiedClassName(jobParams.graphics) != "Array") { - Print("Failure: job " + id + " details didn't contain job name"); + Print("Failure: job " + id + " details didn't contain graphics array"); JobFailed(id); return; } - var name:String = "" + jobParams.name; + var graphicsDetails:Array = jobParams.graphics; delete jobParams.command; - delete jobParams.input; delete jobParams.id; + delete jobParams.graphics; - var job:Job = new Job(id, name, input, jobParams); + var job:Job = new Job(id, graphicsDetails); jobQueue.push(job); CheckNewJob(); } diff --git a/Exporter.exe b/Exporter.exe index 7833fe5..edc8614 100755 --- a/Exporter.exe +++ b/Exporter.exe Binary files differ diff --git a/Exporter.as b/Exporter.as index 45552d3..5adf9dc 100644 --- a/Exporter.as +++ b/Exporter.as @@ -50,6 +50,7 @@ var s:Socket = new Socket(); s.addEventListener(IOErrorEvent.IO_ERROR, DriverError); s.addEventListener(Event.CONNECT, DriverConnected); + s.addEventListener(Event.CLOSE, DriverClosed); s.connect("localhost", port); } catch (e) @@ -58,6 +59,11 @@ } } + private function DriverClosed(e) + { + Quit(); + } + private function DriverError(e) { Trace(" Failed to connect"); @@ -85,13 +91,7 @@ private var jobQueue:Array = new Array(); private var activeJob:Job = null; private function QueueJob(jobParams) - { - var input:ByteArray = null; - if (jobParams.hasOwnProperty("input")) - { - input = Base64.decode("" + jobParams.input); - } - + { if (!jobParams.hasOwnProperty("id")) { Print("Failure: job details didn't contain job id"); @@ -100,19 +100,19 @@ } var id:int = parseInt(jobParams.id); - if (!jobParams.hasOwnProperty("name")) + if (!jobParams.hasOwnProperty("graphics") || getQualifiedClassName(jobParams.graphics) != "Array") { - Print("Failure: job " + id + " details didn't contain job name"); + Print("Failure: job " + id + " details didn't contain graphics array"); JobFailed(id); return; } - var name:String = "" + jobParams.name; + var graphicsDetails:Array = jobParams.graphics; delete jobParams.command; - delete jobParams.input; delete jobParams.id; + delete jobParams.graphics; - var job:Job = new Job(id, name, input, jobParams); + var job:Job = new Job(id, graphicsDetails); jobQueue.push(job); CheckNewJob(); } diff --git a/Exporter.exe b/Exporter.exe index 7833fe5..edc8614 100755 --- a/Exporter.exe +++ b/Exporter.exe Binary files differ diff --git a/Exporter.swf b/Exporter.swf index 9c7464a..ac37031 100644 --- a/Exporter.swf +++ b/Exporter.swf Binary files differ diff --git a/Exporter.as b/Exporter.as index 45552d3..5adf9dc 100644 --- a/Exporter.as +++ b/Exporter.as @@ -50,6 +50,7 @@ var s:Socket = new Socket(); s.addEventListener(IOErrorEvent.IO_ERROR, DriverError); s.addEventListener(Event.CONNECT, DriverConnected); + s.addEventListener(Event.CLOSE, DriverClosed); s.connect("localhost", port); } catch (e) @@ -58,6 +59,11 @@ } } + private function DriverClosed(e) + { + Quit(); + } + private function DriverError(e) { Trace(" Failed to connect"); @@ -85,13 +91,7 @@ private var jobQueue:Array = new Array(); private var activeJob:Job = null; private function QueueJob(jobParams) - { - var input:ByteArray = null; - if (jobParams.hasOwnProperty("input")) - { - input = Base64.decode("" + jobParams.input); - } - + { if (!jobParams.hasOwnProperty("id")) { Print("Failure: job details didn't contain job id"); @@ -100,19 +100,19 @@ } var id:int = parseInt(jobParams.id); - if (!jobParams.hasOwnProperty("name")) + if (!jobParams.hasOwnProperty("graphics") || getQualifiedClassName(jobParams.graphics) != "Array") { - Print("Failure: job " + id + " details didn't contain job name"); + Print("Failure: job " + id + " details didn't contain graphics array"); JobFailed(id); return; } - var name:String = "" + jobParams.name; + var graphicsDetails:Array = jobParams.graphics; delete jobParams.command; - delete jobParams.input; delete jobParams.id; + delete jobParams.graphics; - var job:Job = new Job(id, name, input, jobParams); + var job:Job = new Job(id, graphicsDetails); jobQueue.push(job); CheckNewJob(); } diff --git a/Exporter.exe b/Exporter.exe index 7833fe5..edc8614 100755 --- a/Exporter.exe +++ b/Exporter.exe Binary files differ diff --git a/Exporter.swf b/Exporter.swf index 9c7464a..ac37031 100644 --- a/Exporter.swf +++ b/Exporter.swf Binary files differ diff --git a/GraphicExportDef.as b/GraphicExportDef.as new file mode 100755 index 0000000..a7213d6 --- /dev/null +++ b/GraphicExportDef.as @@ -0,0 +1,93 @@ +package +{ + import flash.utils.*; + import flash.display.*; + import flash.system.LoaderContext; + import flash.events.*; + import by.blooddy.crypto.*; + public class GraphicExportDef + { + private var _exportType:int = 1; + public function get exportType():int { return _exportType; } + + private var _name:String = null; + public function get name():String { return _name; } + + private var _valid:Boolean = false; + public function get valid():Boolean { return _valid; } + + private var input:ByteArray; + private var inputLoader:Loader = null; + + private var parentJob:Job = null; + + private var callback = null; + + private var index:int = 0; + + public function GraphicExportDef(parentJob:Job, details, index:int) + { + this.parentJob = parentJob; + this.index = index; + if (!details.hasOwnProperty("type") || !details.hasOwnProperty("name") || !details.hasOwnProperty("input")) + { + Fail("graphic export is missing a required name, type, or input"); + return; + } + _exportType = parseInt(details.type); + _name = "" + details.name; + input = Base64.decode("" + details.input); + _valid = true; + } + + public function Fail(err:String) + { + parentJob.FailMessage("(" + index + ")" + err); + if (callback != null) callback(); + } + + public function Go(callback) + { + this.callback = callback; + + 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() + { + this.callback(); + } + } +} \ No newline at end of file diff --git a/Exporter.as b/Exporter.as index 45552d3..5adf9dc 100644 --- a/Exporter.as +++ b/Exporter.as @@ -50,6 +50,7 @@ var s:Socket = new Socket(); s.addEventListener(IOErrorEvent.IO_ERROR, DriverError); s.addEventListener(Event.CONNECT, DriverConnected); + s.addEventListener(Event.CLOSE, DriverClosed); s.connect("localhost", port); } catch (e) @@ -58,6 +59,11 @@ } } + private function DriverClosed(e) + { + Quit(); + } + private function DriverError(e) { Trace(" Failed to connect"); @@ -85,13 +91,7 @@ private var jobQueue:Array = new Array(); private var activeJob:Job = null; private function QueueJob(jobParams) - { - var input:ByteArray = null; - if (jobParams.hasOwnProperty("input")) - { - input = Base64.decode("" + jobParams.input); - } - + { if (!jobParams.hasOwnProperty("id")) { Print("Failure: job details didn't contain job id"); @@ -100,19 +100,19 @@ } var id:int = parseInt(jobParams.id); - if (!jobParams.hasOwnProperty("name")) + if (!jobParams.hasOwnProperty("graphics") || getQualifiedClassName(jobParams.graphics) != "Array") { - Print("Failure: job " + id + " details didn't contain job name"); + Print("Failure: job " + id + " details didn't contain graphics array"); JobFailed(id); return; } - var name:String = "" + jobParams.name; + var graphicsDetails:Array = jobParams.graphics; delete jobParams.command; - delete jobParams.input; delete jobParams.id; + delete jobParams.graphics; - var job:Job = new Job(id, name, input, jobParams); + var job:Job = new Job(id, graphicsDetails); jobQueue.push(job); CheckNewJob(); } diff --git a/Exporter.exe b/Exporter.exe index 7833fe5..edc8614 100755 --- a/Exporter.exe +++ b/Exporter.exe Binary files differ diff --git a/Exporter.swf b/Exporter.swf index 9c7464a..ac37031 100644 --- a/Exporter.swf +++ b/Exporter.swf Binary files differ diff --git a/GraphicExportDef.as b/GraphicExportDef.as new file mode 100755 index 0000000..a7213d6 --- /dev/null +++ b/GraphicExportDef.as @@ -0,0 +1,93 @@ +package +{ + import flash.utils.*; + import flash.display.*; + import flash.system.LoaderContext; + import flash.events.*; + import by.blooddy.crypto.*; + public class GraphicExportDef + { + private var _exportType:int = 1; + public function get exportType():int { return _exportType; } + + private var _name:String = null; + public function get name():String { return _name; } + + private var _valid:Boolean = false; + public function get valid():Boolean { return _valid; } + + private var input:ByteArray; + private var inputLoader:Loader = null; + + private var parentJob:Job = null; + + private var callback = null; + + private var index:int = 0; + + public function GraphicExportDef(parentJob:Job, details, index:int) + { + this.parentJob = parentJob; + this.index = index; + if (!details.hasOwnProperty("type") || !details.hasOwnProperty("name") || !details.hasOwnProperty("input")) + { + Fail("graphic export is missing a required name, type, or input"); + return; + } + _exportType = parseInt(details.type); + _name = "" + details.name; + input = Base64.decode("" + details.input); + _valid = true; + } + + public function Fail(err:String) + { + parentJob.FailMessage("(" + index + ")" + err); + if (callback != null) callback(); + } + + public function Go(callback) + { + this.callback = callback; + + 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() + { + this.callback(); + } + } +} \ No newline at end of file diff --git a/Job.as b/Job.as index 27c78fb..9963ae1 100755 --- a/Job.as +++ b/Job.as @@ -1,82 +1,64 @@ 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; + + private var graphics:Array = new Array(); + public function GetID():int { return this.id; } - public function Job(id:int, name:String, input:ByteArray, details) + public function Job(id:int, graphicsDetails:Array) { this.id = id; - this.name = name; - this.input = input; - this.details = details; + for (var i in graphicsDetails) + { + var graphic:GraphicExportDef = new GraphicExportDef(this, graphicsDetails[i], i); + if (graphic.valid) + { + graphics.push(graphic); + } + } Exporter.Instance.Trace("new job: " + id); } - private function Fail(err:String) + public function FailMessage(err:String) { Exporter.Instance.Print("Failure: job " + id + ": " + err); - callback(); } + + private var goIndex = -1; public function Go(callback) { this.callback = callback; - if (this.input == null) - { - Fail("contained no input"); - return; - } + goIndex = -1; - inputLoader = new Loader(); - inputLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, LoaderComplete); - inputLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, LoaderError); - inputLoader.loadBytes(input, new LoaderContext()); + CheckNextGraphic(); } - private function LoaderComplete(e) + + private function CheckNextGraphic() { - try + goIndex++; + if (goIndex < graphics.length) { - 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); - + graphics[goIndex].Go(CheckNextGraphic); + } + else + { 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}; diff --git a/Exporter.as b/Exporter.as index 45552d3..5adf9dc 100644 --- a/Exporter.as +++ b/Exporter.as @@ -50,6 +50,7 @@ var s:Socket = new Socket(); s.addEventListener(IOErrorEvent.IO_ERROR, DriverError); s.addEventListener(Event.CONNECT, DriverConnected); + s.addEventListener(Event.CLOSE, DriverClosed); s.connect("localhost", port); } catch (e) @@ -58,6 +59,11 @@ } } + private function DriverClosed(e) + { + Quit(); + } + private function DriverError(e) { Trace(" Failed to connect"); @@ -85,13 +91,7 @@ private var jobQueue:Array = new Array(); private var activeJob:Job = null; private function QueueJob(jobParams) - { - var input:ByteArray = null; - if (jobParams.hasOwnProperty("input")) - { - input = Base64.decode("" + jobParams.input); - } - + { if (!jobParams.hasOwnProperty("id")) { Print("Failure: job details didn't contain job id"); @@ -100,19 +100,19 @@ } var id:int = parseInt(jobParams.id); - if (!jobParams.hasOwnProperty("name")) + if (!jobParams.hasOwnProperty("graphics") || getQualifiedClassName(jobParams.graphics) != "Array") { - Print("Failure: job " + id + " details didn't contain job name"); + Print("Failure: job " + id + " details didn't contain graphics array"); JobFailed(id); return; } - var name:String = "" + jobParams.name; + var graphicsDetails:Array = jobParams.graphics; delete jobParams.command; - delete jobParams.input; delete jobParams.id; + delete jobParams.graphics; - var job:Job = new Job(id, name, input, jobParams); + var job:Job = new Job(id, graphicsDetails); jobQueue.push(job); CheckNewJob(); } diff --git a/Exporter.exe b/Exporter.exe index 7833fe5..edc8614 100755 --- a/Exporter.exe +++ b/Exporter.exe Binary files differ diff --git a/Exporter.swf b/Exporter.swf index 9c7464a..ac37031 100644 --- a/Exporter.swf +++ b/Exporter.swf Binary files differ diff --git a/GraphicExportDef.as b/GraphicExportDef.as new file mode 100755 index 0000000..a7213d6 --- /dev/null +++ b/GraphicExportDef.as @@ -0,0 +1,93 @@ +package +{ + import flash.utils.*; + import flash.display.*; + import flash.system.LoaderContext; + import flash.events.*; + import by.blooddy.crypto.*; + public class GraphicExportDef + { + private var _exportType:int = 1; + public function get exportType():int { return _exportType; } + + private var _name:String = null; + public function get name():String { return _name; } + + private var _valid:Boolean = false; + public function get valid():Boolean { return _valid; } + + private var input:ByteArray; + private var inputLoader:Loader = null; + + private var parentJob:Job = null; + + private var callback = null; + + private var index:int = 0; + + public function GraphicExportDef(parentJob:Job, details, index:int) + { + this.parentJob = parentJob; + this.index = index; + if (!details.hasOwnProperty("type") || !details.hasOwnProperty("name") || !details.hasOwnProperty("input")) + { + Fail("graphic export is missing a required name, type, or input"); + return; + } + _exportType = parseInt(details.type); + _name = "" + details.name; + input = Base64.decode("" + details.input); + _valid = true; + } + + public function Fail(err:String) + { + parentJob.FailMessage("(" + index + ")" + err); + if (callback != null) callback(); + } + + public function Go(callback) + { + this.callback = callback; + + 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() + { + this.callback(); + } + } +} \ No newline at end of file diff --git a/Job.as b/Job.as index 27c78fb..9963ae1 100755 --- a/Job.as +++ b/Job.as @@ -1,82 +1,64 @@ 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; + + private var graphics:Array = new Array(); + public function GetID():int { return this.id; } - public function Job(id:int, name:String, input:ByteArray, details) + public function Job(id:int, graphicsDetails:Array) { this.id = id; - this.name = name; - this.input = input; - this.details = details; + for (var i in graphicsDetails) + { + var graphic:GraphicExportDef = new GraphicExportDef(this, graphicsDetails[i], i); + if (graphic.valid) + { + graphics.push(graphic); + } + } Exporter.Instance.Trace("new job: " + id); } - private function Fail(err:String) + public function FailMessage(err:String) { Exporter.Instance.Print("Failure: job " + id + ": " + err); - callback(); } + + private var goIndex = -1; public function Go(callback) { this.callback = callback; - if (this.input == null) - { - Fail("contained no input"); - return; - } + goIndex = -1; - inputLoader = new Loader(); - inputLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, LoaderComplete); - inputLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, LoaderError); - inputLoader.loadBytes(input, new LoaderContext()); + CheckNextGraphic(); } - private function LoaderComplete(e) + + private function CheckNextGraphic() { - try + goIndex++; + if (goIndex < graphics.length) { - 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); - + graphics[goIndex].Go(CheckNextGraphic); + } + else + { 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}; diff --git a/job.py b/job.py index 401bbce..4896c51 100644 --- a/job.py +++ b/job.py @@ -52,14 +52,20 @@ raise Exception("Failed: " + in_file + " " + str(e)) for graphic_json in file_json["graphics"]: - self.graphics.append(Graphic(graphic_json)) + self.graphics.append(Graphic(split[0], graphic_json)) def get_cmd(self): return {"graphics":[g.get_cmd() for g in self.graphics], "id":self.id} class Graphic: - def __init__(self, json): + def __init__(self, folder, json): self.json = json + self.swf_path = os.path.join(folder, json["swf"]) + json.pop("swf") + with open(self.swf_path, mode="rb") as f: + contents = f.read() + self.swf = base64.b64encode(contents) def get_cmd(self): - return {} + cmd = dict(self.json.items() + [("input", self.swf)]) + return cmd