diff --git a/DebugExporter-app.xml b/DebugExporter-app.xml new file mode 100755 index 0000000..e2ff06e --- /dev/null +++ b/DebugExporter-app.xml @@ -0,0 +1,38 @@ + + + + DebugExporter + 1.0 + DebugExporter + + DebugExporter + + + DebugExporter.swf + standard + false + true + false + portrait + auto + + + false + false + diff --git a/DebugExporter-app.xml b/DebugExporter-app.xml new file mode 100755 index 0000000..e2ff06e --- /dev/null +++ b/DebugExporter-app.xml @@ -0,0 +1,38 @@ + + + + DebugExporter + 1.0 + DebugExporter + + DebugExporter + + + DebugExporter.swf + standard + false + true + false + portrait + auto + + + false + false + diff --git a/DebugExporter.fla b/DebugExporter.fla new file mode 100755 index 0000000..9f0dff6 --- /dev/null +++ b/DebugExporter.fla Binary files differ diff --git a/DebugExporter-app.xml b/DebugExporter-app.xml new file mode 100755 index 0000000..e2ff06e --- /dev/null +++ b/DebugExporter-app.xml @@ -0,0 +1,38 @@ + + + + DebugExporter + 1.0 + DebugExporter + + DebugExporter + + + DebugExporter.swf + standard + false + true + false + portrait + auto + + + false + false + diff --git a/DebugExporter.fla b/DebugExporter.fla new file mode 100755 index 0000000..9f0dff6 --- /dev/null +++ b/DebugExporter.fla Binary files differ diff --git a/DebugExporter.swf b/DebugExporter.swf new file mode 100755 index 0000000..3a08579 --- /dev/null +++ b/DebugExporter.swf Binary files differ diff --git a/DebugExporter-app.xml b/DebugExporter-app.xml new file mode 100755 index 0000000..e2ff06e --- /dev/null +++ b/DebugExporter-app.xml @@ -0,0 +1,38 @@ + + + + DebugExporter + 1.0 + DebugExporter + + DebugExporter + + + DebugExporter.swf + standard + false + true + false + portrait + auto + + + false + false + diff --git a/DebugExporter.fla b/DebugExporter.fla new file mode 100755 index 0000000..9f0dff6 --- /dev/null +++ b/DebugExporter.fla Binary files differ diff --git a/DebugExporter.swf b/DebugExporter.swf new file mode 100755 index 0000000..3a08579 --- /dev/null +++ b/DebugExporter.swf Binary files differ diff --git a/Exporter.as b/Exporter.as index 5adf9dc..98b1198 100644 --- a/Exporter.as +++ b/Exporter.as @@ -15,12 +15,13 @@ public static var DefaultPort:int = 7890; private var driver:Socket = null; + private var debug:Boolean = false; public function Exporter() { Instance = this; try - { + { NativeApplication.nativeApplication.addEventListener("invoke", ApplicationInvoked); } catch (e) @@ -42,9 +43,15 @@ } } - private function ConnectDriver(port) + private var connected:Boolean = false; + private var lastPort:int; + private function ConnectDriver(port:int, firstTime:Boolean = true) { - Trace("Attempting to connect to driver"); + this.lastPort = port; + if (firstTime) + { + Trace("Attempting to connect to driver"); + } try { var s:Socket = new Socket(); @@ -61,16 +68,32 @@ private function DriverClosed(e) { - Quit(); + connected = false; + if (debug) + { + ConnectDriver(lastPort); + } + else + { + Quit(); + } } private function DriverError(e) { - Trace(" Failed to connect"); + if (!debug) + { + Trace(" Failed to connect"); + } + if (debug && !connected) + { + setTimeout(ConnectDriver, 500, lastPort, false); + } } private function DriverConnected(e) { + connected = true; Trace(" Connected"); driver = e.target as Socket; driver.addEventListener(ProgressEvent.SOCKET_DATA, DriverRecv); @@ -239,7 +262,7 @@ trace(str); traceText.width = stage.stageWidth - 4; - traceText.height = stage.stageHeight - 4; + traceText.height = stage.stageHeight + 100; if (traceText.text == "") { traceText.text = str; @@ -248,7 +271,17 @@ { traceText.appendText("\n" + str); } - traceText.y = stage.height - traceText.textHeight - 2; + while (traceText.textHeight > traceText.height) + { + var split = traceText.text.indexOf("\n"); + if (split == -1) + { + traceText.height = traceText.textHeight + 5; + break; + } + traceText.text = traceText.text.substr(split + 1); + } + traceText.y = stage.stageHeight - traceText.textHeight - 2; } public function Print(str:String, localTrace:Boolean = true) diff --git a/DebugExporter-app.xml b/DebugExporter-app.xml new file mode 100755 index 0000000..e2ff06e --- /dev/null +++ b/DebugExporter-app.xml @@ -0,0 +1,38 @@ + + + + DebugExporter + 1.0 + DebugExporter + + DebugExporter + + + DebugExporter.swf + standard + false + true + false + portrait + auto + + + false + false + diff --git a/DebugExporter.fla b/DebugExporter.fla new file mode 100755 index 0000000..9f0dff6 --- /dev/null +++ b/DebugExporter.fla Binary files differ diff --git a/DebugExporter.swf b/DebugExporter.swf new file mode 100755 index 0000000..3a08579 --- /dev/null +++ b/DebugExporter.swf Binary files differ diff --git a/Exporter.as b/Exporter.as index 5adf9dc..98b1198 100644 --- a/Exporter.as +++ b/Exporter.as @@ -15,12 +15,13 @@ public static var DefaultPort:int = 7890; private var driver:Socket = null; + private var debug:Boolean = false; public function Exporter() { Instance = this; try - { + { NativeApplication.nativeApplication.addEventListener("invoke", ApplicationInvoked); } catch (e) @@ -42,9 +43,15 @@ } } - private function ConnectDriver(port) + private var connected:Boolean = false; + private var lastPort:int; + private function ConnectDriver(port:int, firstTime:Boolean = true) { - Trace("Attempting to connect to driver"); + this.lastPort = port; + if (firstTime) + { + Trace("Attempting to connect to driver"); + } try { var s:Socket = new Socket(); @@ -61,16 +68,32 @@ private function DriverClosed(e) { - Quit(); + connected = false; + if (debug) + { + ConnectDriver(lastPort); + } + else + { + Quit(); + } } private function DriverError(e) { - Trace(" Failed to connect"); + if (!debug) + { + Trace(" Failed to connect"); + } + if (debug && !connected) + { + setTimeout(ConnectDriver, 500, lastPort, false); + } } private function DriverConnected(e) { + connected = true; Trace(" Connected"); driver = e.target as Socket; driver.addEventListener(ProgressEvent.SOCKET_DATA, DriverRecv); @@ -239,7 +262,7 @@ trace(str); traceText.width = stage.stageWidth - 4; - traceText.height = stage.stageHeight - 4; + traceText.height = stage.stageHeight + 100; if (traceText.text == "") { traceText.text = str; @@ -248,7 +271,17 @@ { traceText.appendText("\n" + str); } - traceText.y = stage.height - traceText.textHeight - 2; + while (traceText.textHeight > traceText.height) + { + var split = traceText.text.indexOf("\n"); + if (split == -1) + { + traceText.height = traceText.textHeight + 5; + break; + } + traceText.text = traceText.text.substr(split + 1); + } + traceText.y = stage.stageHeight - traceText.textHeight - 2; } public function Print(str:String, localTrace:Boolean = true) diff --git a/GraphicExportDef.as b/GraphicExportDef.as index a7213d6..fb60e89 100755 --- a/GraphicExportDef.as +++ b/GraphicExportDef.as @@ -5,6 +5,8 @@ import flash.system.LoaderContext; import flash.events.*; import by.blooddy.crypto.*; + import flash.system.SecurityDomain; + public class GraphicExportDef { private var _exportType:int = 1; @@ -53,7 +55,9 @@ inputLoader = new Loader(); inputLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, LoaderComplete); inputLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, LoaderError); - inputLoader.loadBytes(input, new LoaderContext()); + var context:LoaderContext = new LoaderContext(); + context.allowCodeImport = true; + inputLoader.loadBytes(input, context); } private function LoaderComplete(e) diff --git a/DebugExporter-app.xml b/DebugExporter-app.xml new file mode 100755 index 0000000..e2ff06e --- /dev/null +++ b/DebugExporter-app.xml @@ -0,0 +1,38 @@ + + + + DebugExporter + 1.0 + DebugExporter + + DebugExporter + + + DebugExporter.swf + standard + false + true + false + portrait + auto + + + false + false + diff --git a/DebugExporter.fla b/DebugExporter.fla new file mode 100755 index 0000000..9f0dff6 --- /dev/null +++ b/DebugExporter.fla Binary files differ diff --git a/DebugExporter.swf b/DebugExporter.swf new file mode 100755 index 0000000..3a08579 --- /dev/null +++ b/DebugExporter.swf Binary files differ diff --git a/Exporter.as b/Exporter.as index 5adf9dc..98b1198 100644 --- a/Exporter.as +++ b/Exporter.as @@ -15,12 +15,13 @@ public static var DefaultPort:int = 7890; private var driver:Socket = null; + private var debug:Boolean = false; public function Exporter() { Instance = this; try - { + { NativeApplication.nativeApplication.addEventListener("invoke", ApplicationInvoked); } catch (e) @@ -42,9 +43,15 @@ } } - private function ConnectDriver(port) + private var connected:Boolean = false; + private var lastPort:int; + private function ConnectDriver(port:int, firstTime:Boolean = true) { - Trace("Attempting to connect to driver"); + this.lastPort = port; + if (firstTime) + { + Trace("Attempting to connect to driver"); + } try { var s:Socket = new Socket(); @@ -61,16 +68,32 @@ private function DriverClosed(e) { - Quit(); + connected = false; + if (debug) + { + ConnectDriver(lastPort); + } + else + { + Quit(); + } } private function DriverError(e) { - Trace(" Failed to connect"); + if (!debug) + { + Trace(" Failed to connect"); + } + if (debug && !connected) + { + setTimeout(ConnectDriver, 500, lastPort, false); + } } private function DriverConnected(e) { + connected = true; Trace(" Connected"); driver = e.target as Socket; driver.addEventListener(ProgressEvent.SOCKET_DATA, DriverRecv); @@ -239,7 +262,7 @@ trace(str); traceText.width = stage.stageWidth - 4; - traceText.height = stage.stageHeight - 4; + traceText.height = stage.stageHeight + 100; if (traceText.text == "") { traceText.text = str; @@ -248,7 +271,17 @@ { traceText.appendText("\n" + str); } - traceText.y = stage.height - traceText.textHeight - 2; + while (traceText.textHeight > traceText.height) + { + var split = traceText.text.indexOf("\n"); + if (split == -1) + { + traceText.height = traceText.textHeight + 5; + break; + } + traceText.text = traceText.text.substr(split + 1); + } + traceText.y = stage.stageHeight - traceText.textHeight - 2; } public function Print(str:String, localTrace:Boolean = true) diff --git a/GraphicExportDef.as b/GraphicExportDef.as index a7213d6..fb60e89 100755 --- a/GraphicExportDef.as +++ b/GraphicExportDef.as @@ -5,6 +5,8 @@ import flash.system.LoaderContext; import flash.events.*; import by.blooddy.crypto.*; + import flash.system.SecurityDomain; + public class GraphicExportDef { private var _exportType:int = 1; @@ -53,7 +55,9 @@ inputLoader = new Loader(); inputLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, LoaderComplete); inputLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, LoaderError); - inputLoader.loadBytes(input, new LoaderContext()); + var context:LoaderContext = new LoaderContext(); + context.allowCodeImport = true; + inputLoader.loadBytes(input, context); } private function LoaderComplete(e) diff --git a/args.py b/args.py index 72e946d..a2a64e8 100644 --- a/args.py +++ b/args.py @@ -65,6 +65,8 @@ if msg is not None: return (msg, None) ret["base"] = b + elif arg == "--debug" or arg == "-d": + ret["debug"] = True else: ret["input"].append(arg) self.i += 1 diff --git a/DebugExporter-app.xml b/DebugExporter-app.xml new file mode 100755 index 0000000..e2ff06e --- /dev/null +++ b/DebugExporter-app.xml @@ -0,0 +1,38 @@ + + + + DebugExporter + 1.0 + DebugExporter + + DebugExporter + + + DebugExporter.swf + standard + false + true + false + portrait + auto + + + false + false + diff --git a/DebugExporter.fla b/DebugExporter.fla new file mode 100755 index 0000000..9f0dff6 --- /dev/null +++ b/DebugExporter.fla Binary files differ diff --git a/DebugExporter.swf b/DebugExporter.swf new file mode 100755 index 0000000..3a08579 --- /dev/null +++ b/DebugExporter.swf Binary files differ diff --git a/Exporter.as b/Exporter.as index 5adf9dc..98b1198 100644 --- a/Exporter.as +++ b/Exporter.as @@ -15,12 +15,13 @@ public static var DefaultPort:int = 7890; private var driver:Socket = null; + private var debug:Boolean = false; public function Exporter() { Instance = this; try - { + { NativeApplication.nativeApplication.addEventListener("invoke", ApplicationInvoked); } catch (e) @@ -42,9 +43,15 @@ } } - private function ConnectDriver(port) + private var connected:Boolean = false; + private var lastPort:int; + private function ConnectDriver(port:int, firstTime:Boolean = true) { - Trace("Attempting to connect to driver"); + this.lastPort = port; + if (firstTime) + { + Trace("Attempting to connect to driver"); + } try { var s:Socket = new Socket(); @@ -61,16 +68,32 @@ private function DriverClosed(e) { - Quit(); + connected = false; + if (debug) + { + ConnectDriver(lastPort); + } + else + { + Quit(); + } } private function DriverError(e) { - Trace(" Failed to connect"); + if (!debug) + { + Trace(" Failed to connect"); + } + if (debug && !connected) + { + setTimeout(ConnectDriver, 500, lastPort, false); + } } private function DriverConnected(e) { + connected = true; Trace(" Connected"); driver = e.target as Socket; driver.addEventListener(ProgressEvent.SOCKET_DATA, DriverRecv); @@ -239,7 +262,7 @@ trace(str); traceText.width = stage.stageWidth - 4; - traceText.height = stage.stageHeight - 4; + traceText.height = stage.stageHeight + 100; if (traceText.text == "") { traceText.text = str; @@ -248,7 +271,17 @@ { traceText.appendText("\n" + str); } - traceText.y = stage.height - traceText.textHeight - 2; + while (traceText.textHeight > traceText.height) + { + var split = traceText.text.indexOf("\n"); + if (split == -1) + { + traceText.height = traceText.textHeight + 5; + break; + } + traceText.text = traceText.text.substr(split + 1); + } + traceText.y = stage.stageHeight - traceText.textHeight - 2; } public function Print(str:String, localTrace:Boolean = true) diff --git a/GraphicExportDef.as b/GraphicExportDef.as index a7213d6..fb60e89 100755 --- a/GraphicExportDef.as +++ b/GraphicExportDef.as @@ -5,6 +5,8 @@ import flash.system.LoaderContext; import flash.events.*; import by.blooddy.crypto.*; + import flash.system.SecurityDomain; + public class GraphicExportDef { private var _exportType:int = 1; @@ -53,7 +55,9 @@ inputLoader = new Loader(); inputLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, LoaderComplete); inputLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, LoaderError); - inputLoader.loadBytes(input, new LoaderContext()); + var context:LoaderContext = new LoaderContext(); + context.allowCodeImport = true; + inputLoader.loadBytes(input, context); } private function LoaderComplete(e) diff --git a/args.py b/args.py index 72e946d..a2a64e8 100644 --- a/args.py +++ b/args.py @@ -65,6 +65,8 @@ if msg is not None: return (msg, None) ret["base"] = b + elif arg == "--debug" or arg == "-d": + ret["debug"] = True else: ret["input"].append(arg) self.i += 1 diff --git a/driver.py b/driver.py index 53a67ea..0a045d6 100644 --- a/driver.py +++ b/driver.py @@ -9,9 +9,10 @@ import struct class Driver: - def __init__(self, port, use_stdin, use_air = False): + def __init__(self, port, use_stdin, exporter_already_running = False, use_air = False): self.port = port self.use_stdin = use_stdin + self.exporter_already_running = exporter_already_running self.use_air = use_air self.stdin = None self.conn = None @@ -23,11 +24,12 @@ self.sock.settimeout(0.5) self.sock.listen(0) - exporter_proc_args = [os.getcwd() + "/Exporter.exe"] - if self.use_air: - exporter_proc_args = [os.getcwd() + "/Exporter.app/Expoter.exe", str(self.port)] + if not self.exporter_already_running: + exporter_proc_args = [os.getcwd() + "/Exporter.exe"] + if self.use_air: + exporter_proc_args = [os.getcwd() + "/Exporter.app/Expoter.exe", str(self.port)] - self.proc = subprocess.Popen(exporter_proc_args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + self.proc = subprocess.Popen(exporter_proc_args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) if self.use_stdin: self.stdin = Queue.Queue() @@ -35,7 +37,7 @@ reader.daemon = True reader.start() - while self.conn is None and self.proc.returncode is None: + while self.conn is None and (self.exporter_already_running or self.proc.returncode is None): try: (self.conn, _) = self.sock.accept() except socket.timeout, e: @@ -43,9 +45,11 @@ except e: print e self.sock.close() - self.proc.wait() + if not self.exporter_already_running: + self.proc.wait() sys.exit(1) - self.proc.poll() + if not self.exporter_already_running: + self.proc.poll() if self.conn: self.conn.setblocking(False) @@ -60,7 +64,8 @@ def loop(self, msg_callback, stdin_callback = None): buf = "" quit = False - while self.proc.returncode is None: + closed = False + while self.exporter_already_running or self.proc.returncode is None: try: d = self.conn.recv(4096) if len(d): @@ -72,12 +77,16 @@ buf = buf[2+buf_len:] if not msg_callback(msg): quit = True + else: + quit = True + closed = True except socket.error, e: if e.args[0] == errno.EWOULDBLOCK or e.args[0] == errno.EAGAIN: pass else: print e quit = True + closed = True if not quit and self.use_stdin and self.stdin.qsize(): line = self.stdin.get() if line == "": @@ -86,12 +95,15 @@ if not stdin_callback(line): quit = True if quit: - self.send_json({"command":"exit"}) + if not closed: + self.send_json({"command":"exit"}) self.conn.close() self.sock.close() - self.proc.kill() + if not self.exporter_already_running: + self.proc.kill() sys.exit(1) - self.proc.poll() + if not self.exporter_already_running: + self.proc.poll() if self.conn: self.conn.close() diff --git a/DebugExporter-app.xml b/DebugExporter-app.xml new file mode 100755 index 0000000..e2ff06e --- /dev/null +++ b/DebugExporter-app.xml @@ -0,0 +1,38 @@ + + + + DebugExporter + 1.0 + DebugExporter + + DebugExporter + + + DebugExporter.swf + standard + false + true + false + portrait + auto + + + false + false + diff --git a/DebugExporter.fla b/DebugExporter.fla new file mode 100755 index 0000000..9f0dff6 --- /dev/null +++ b/DebugExporter.fla Binary files differ diff --git a/DebugExporter.swf b/DebugExporter.swf new file mode 100755 index 0000000..3a08579 --- /dev/null +++ b/DebugExporter.swf Binary files differ diff --git a/Exporter.as b/Exporter.as index 5adf9dc..98b1198 100644 --- a/Exporter.as +++ b/Exporter.as @@ -15,12 +15,13 @@ public static var DefaultPort:int = 7890; private var driver:Socket = null; + private var debug:Boolean = false; public function Exporter() { Instance = this; try - { + { NativeApplication.nativeApplication.addEventListener("invoke", ApplicationInvoked); } catch (e) @@ -42,9 +43,15 @@ } } - private function ConnectDriver(port) + private var connected:Boolean = false; + private var lastPort:int; + private function ConnectDriver(port:int, firstTime:Boolean = true) { - Trace("Attempting to connect to driver"); + this.lastPort = port; + if (firstTime) + { + Trace("Attempting to connect to driver"); + } try { var s:Socket = new Socket(); @@ -61,16 +68,32 @@ private function DriverClosed(e) { - Quit(); + connected = false; + if (debug) + { + ConnectDriver(lastPort); + } + else + { + Quit(); + } } private function DriverError(e) { - Trace(" Failed to connect"); + if (!debug) + { + Trace(" Failed to connect"); + } + if (debug && !connected) + { + setTimeout(ConnectDriver, 500, lastPort, false); + } } private function DriverConnected(e) { + connected = true; Trace(" Connected"); driver = e.target as Socket; driver.addEventListener(ProgressEvent.SOCKET_DATA, DriverRecv); @@ -239,7 +262,7 @@ trace(str); traceText.width = stage.stageWidth - 4; - traceText.height = stage.stageHeight - 4; + traceText.height = stage.stageHeight + 100; if (traceText.text == "") { traceText.text = str; @@ -248,7 +271,17 @@ { traceText.appendText("\n" + str); } - traceText.y = stage.height - traceText.textHeight - 2; + while (traceText.textHeight > traceText.height) + { + var split = traceText.text.indexOf("\n"); + if (split == -1) + { + traceText.height = traceText.textHeight + 5; + break; + } + traceText.text = traceText.text.substr(split + 1); + } + traceText.y = stage.stageHeight - traceText.textHeight - 2; } public function Print(str:String, localTrace:Boolean = true) diff --git a/GraphicExportDef.as b/GraphicExportDef.as index a7213d6..fb60e89 100755 --- a/GraphicExportDef.as +++ b/GraphicExportDef.as @@ -5,6 +5,8 @@ import flash.system.LoaderContext; import flash.events.*; import by.blooddy.crypto.*; + import flash.system.SecurityDomain; + public class GraphicExportDef { private var _exportType:int = 1; @@ -53,7 +55,9 @@ inputLoader = new Loader(); inputLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, LoaderComplete); inputLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, LoaderError); - inputLoader.loadBytes(input, new LoaderContext()); + var context:LoaderContext = new LoaderContext(); + context.allowCodeImport = true; + inputLoader.loadBytes(input, context); } private function LoaderComplete(e) diff --git a/args.py b/args.py index 72e946d..a2a64e8 100644 --- a/args.py +++ b/args.py @@ -65,6 +65,8 @@ if msg is not None: return (msg, None) ret["base"] = b + elif arg == "--debug" or arg == "-d": + ret["debug"] = True else: ret["input"].append(arg) self.i += 1 diff --git a/driver.py b/driver.py index 53a67ea..0a045d6 100644 --- a/driver.py +++ b/driver.py @@ -9,9 +9,10 @@ import struct class Driver: - def __init__(self, port, use_stdin, use_air = False): + def __init__(self, port, use_stdin, exporter_already_running = False, use_air = False): self.port = port self.use_stdin = use_stdin + self.exporter_already_running = exporter_already_running self.use_air = use_air self.stdin = None self.conn = None @@ -23,11 +24,12 @@ self.sock.settimeout(0.5) self.sock.listen(0) - exporter_proc_args = [os.getcwd() + "/Exporter.exe"] - if self.use_air: - exporter_proc_args = [os.getcwd() + "/Exporter.app/Expoter.exe", str(self.port)] + if not self.exporter_already_running: + exporter_proc_args = [os.getcwd() + "/Exporter.exe"] + if self.use_air: + exporter_proc_args = [os.getcwd() + "/Exporter.app/Expoter.exe", str(self.port)] - self.proc = subprocess.Popen(exporter_proc_args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + self.proc = subprocess.Popen(exporter_proc_args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) if self.use_stdin: self.stdin = Queue.Queue() @@ -35,7 +37,7 @@ reader.daemon = True reader.start() - while self.conn is None and self.proc.returncode is None: + while self.conn is None and (self.exporter_already_running or self.proc.returncode is None): try: (self.conn, _) = self.sock.accept() except socket.timeout, e: @@ -43,9 +45,11 @@ except e: print e self.sock.close() - self.proc.wait() + if not self.exporter_already_running: + self.proc.wait() sys.exit(1) - self.proc.poll() + if not self.exporter_already_running: + self.proc.poll() if self.conn: self.conn.setblocking(False) @@ -60,7 +64,8 @@ def loop(self, msg_callback, stdin_callback = None): buf = "" quit = False - while self.proc.returncode is None: + closed = False + while self.exporter_already_running or self.proc.returncode is None: try: d = self.conn.recv(4096) if len(d): @@ -72,12 +77,16 @@ buf = buf[2+buf_len:] if not msg_callback(msg): quit = True + else: + quit = True + closed = True except socket.error, e: if e.args[0] == errno.EWOULDBLOCK or e.args[0] == errno.EAGAIN: pass else: print e quit = True + closed = True if not quit and self.use_stdin and self.stdin.qsize(): line = self.stdin.get() if line == "": @@ -86,12 +95,15 @@ if not stdin_callback(line): quit = True if quit: - self.send_json({"command":"exit"}) + if not closed: + self.send_json({"command":"exit"}) self.conn.close() self.sock.close() - self.proc.kill() + if not self.exporter_already_running: + self.proc.kill() sys.exit(1) - self.proc.poll() + if not self.exporter_already_running: + self.proc.poll() if self.conn: self.conn.close() diff --git a/exporter.py b/exporter.py index bd73c42..d67d1f4 100755 --- a/exporter.py +++ b/exporter.py @@ -10,13 +10,36 @@ from args import * from job import * from driver import * + +top_level = {("--port","-p"):"wrapper_communication_port", \ + ("--debug","-d"):None} + +per_arg = {("--out","-o"):"out_dir", \ + ("--base","-b"):"base_dir"} + +top_level_all = [k[0][2:] for k in top_level] + +def desc_args(args): + return " ".join(["[" + "/".join(k) + ("" if args[k] is None else " " + args[k]) + "]" for k in args.keys()]) + +def list_long_args(args): + long_args = [k[0] for k in args] + ret = ", ".join(long_args[:-1]) + if len(long_args) >= 2: + ret += " or " + long_args[-1] + return ret + +top_level_desc = desc_args(top_level) +top_level_args = list_long_args(top_level) + +per_arg_desc = desc_args(per_arg) def usage(): - print "usage 1: ./exporter.py [--port/-p wrapper_communication_port] [--base/-b base_dir] [--out/-o out_dir] input_file1.src,input_file2.src,..." + print "usage 1: ./exporter.py " + top_level_desc + " " + per_arg_desc + " input_file1.src,input_file2.src,..." print " Exports the assets specified in the given source file(s)" print - print "usage 2: ./exporter.py [--port/-p wrapper_communication_port] [--base/-b base_dir] [--out/-o out_dir] -" - print " Reads full command lines (everything except --port) as lines from stdin" + print "usage 2: ./exporter.py " + top_level_desc + " -" + print " Reads full command lines (everything except " + per_arg_desc + ") as lines from stdin" print print "usage 3: ./export.py --help|-h" print " Shows this help message" @@ -47,7 +70,7 @@ jobs = {} sent_all_jobs = False -driver = Driver(port, from_stdin) +driver = Driver(port, from_stdin, exporter_already_running = "debug" in args) def send_cmd(cmd, **kwargs): global driver @@ -87,17 +110,21 @@ return False return True parts = shlex.split(line) - (err, line_args) = ArgParser.parse_args(parts) + (err, line_args) = ArgParser().parse_args(parts) if err is not None: print err else: + for a in top_level_all: + if a in line_args: + print "Top level args may not be passed in stdin: " + top_level_args + return True for i in line_args["input"]: try: job = Job(in_file = i) jobs[job.id] = job + send_job(job) except Exception, e: print e - send_job(job) return True def handle_command(msg_str): diff --git a/DebugExporter-app.xml b/DebugExporter-app.xml new file mode 100755 index 0000000..e2ff06e --- /dev/null +++ b/DebugExporter-app.xml @@ -0,0 +1,38 @@ + + + + DebugExporter + 1.0 + DebugExporter + + DebugExporter + + + DebugExporter.swf + standard + false + true + false + portrait + auto + + + false + false + diff --git a/DebugExporter.fla b/DebugExporter.fla new file mode 100755 index 0000000..9f0dff6 --- /dev/null +++ b/DebugExporter.fla Binary files differ diff --git a/DebugExporter.swf b/DebugExporter.swf new file mode 100755 index 0000000..3a08579 --- /dev/null +++ b/DebugExporter.swf Binary files differ diff --git a/Exporter.as b/Exporter.as index 5adf9dc..98b1198 100644 --- a/Exporter.as +++ b/Exporter.as @@ -15,12 +15,13 @@ public static var DefaultPort:int = 7890; private var driver:Socket = null; + private var debug:Boolean = false; public function Exporter() { Instance = this; try - { + { NativeApplication.nativeApplication.addEventListener("invoke", ApplicationInvoked); } catch (e) @@ -42,9 +43,15 @@ } } - private function ConnectDriver(port) + private var connected:Boolean = false; + private var lastPort:int; + private function ConnectDriver(port:int, firstTime:Boolean = true) { - Trace("Attempting to connect to driver"); + this.lastPort = port; + if (firstTime) + { + Trace("Attempting to connect to driver"); + } try { var s:Socket = new Socket(); @@ -61,16 +68,32 @@ private function DriverClosed(e) { - Quit(); + connected = false; + if (debug) + { + ConnectDriver(lastPort); + } + else + { + Quit(); + } } private function DriverError(e) { - Trace(" Failed to connect"); + if (!debug) + { + Trace(" Failed to connect"); + } + if (debug && !connected) + { + setTimeout(ConnectDriver, 500, lastPort, false); + } } private function DriverConnected(e) { + connected = true; Trace(" Connected"); driver = e.target as Socket; driver.addEventListener(ProgressEvent.SOCKET_DATA, DriverRecv); @@ -239,7 +262,7 @@ trace(str); traceText.width = stage.stageWidth - 4; - traceText.height = stage.stageHeight - 4; + traceText.height = stage.stageHeight + 100; if (traceText.text == "") { traceText.text = str; @@ -248,7 +271,17 @@ { traceText.appendText("\n" + str); } - traceText.y = stage.height - traceText.textHeight - 2; + while (traceText.textHeight > traceText.height) + { + var split = traceText.text.indexOf("\n"); + if (split == -1) + { + traceText.height = traceText.textHeight + 5; + break; + } + traceText.text = traceText.text.substr(split + 1); + } + traceText.y = stage.stageHeight - traceText.textHeight - 2; } public function Print(str:String, localTrace:Boolean = true) diff --git a/GraphicExportDef.as b/GraphicExportDef.as index a7213d6..fb60e89 100755 --- a/GraphicExportDef.as +++ b/GraphicExportDef.as @@ -5,6 +5,8 @@ import flash.system.LoaderContext; import flash.events.*; import by.blooddy.crypto.*; + import flash.system.SecurityDomain; + public class GraphicExportDef { private var _exportType:int = 1; @@ -53,7 +55,9 @@ inputLoader = new Loader(); inputLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, LoaderComplete); inputLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, LoaderError); - inputLoader.loadBytes(input, new LoaderContext()); + var context:LoaderContext = new LoaderContext(); + context.allowCodeImport = true; + inputLoader.loadBytes(input, context); } private function LoaderComplete(e) diff --git a/args.py b/args.py index 72e946d..a2a64e8 100644 --- a/args.py +++ b/args.py @@ -65,6 +65,8 @@ if msg is not None: return (msg, None) ret["base"] = b + elif arg == "--debug" or arg == "-d": + ret["debug"] = True else: ret["input"].append(arg) self.i += 1 diff --git a/driver.py b/driver.py index 53a67ea..0a045d6 100644 --- a/driver.py +++ b/driver.py @@ -9,9 +9,10 @@ import struct class Driver: - def __init__(self, port, use_stdin, use_air = False): + def __init__(self, port, use_stdin, exporter_already_running = False, use_air = False): self.port = port self.use_stdin = use_stdin + self.exporter_already_running = exporter_already_running self.use_air = use_air self.stdin = None self.conn = None @@ -23,11 +24,12 @@ self.sock.settimeout(0.5) self.sock.listen(0) - exporter_proc_args = [os.getcwd() + "/Exporter.exe"] - if self.use_air: - exporter_proc_args = [os.getcwd() + "/Exporter.app/Expoter.exe", str(self.port)] + if not self.exporter_already_running: + exporter_proc_args = [os.getcwd() + "/Exporter.exe"] + if self.use_air: + exporter_proc_args = [os.getcwd() + "/Exporter.app/Expoter.exe", str(self.port)] - self.proc = subprocess.Popen(exporter_proc_args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + self.proc = subprocess.Popen(exporter_proc_args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) if self.use_stdin: self.stdin = Queue.Queue() @@ -35,7 +37,7 @@ reader.daemon = True reader.start() - while self.conn is None and self.proc.returncode is None: + while self.conn is None and (self.exporter_already_running or self.proc.returncode is None): try: (self.conn, _) = self.sock.accept() except socket.timeout, e: @@ -43,9 +45,11 @@ except e: print e self.sock.close() - self.proc.wait() + if not self.exporter_already_running: + self.proc.wait() sys.exit(1) - self.proc.poll() + if not self.exporter_already_running: + self.proc.poll() if self.conn: self.conn.setblocking(False) @@ -60,7 +64,8 @@ def loop(self, msg_callback, stdin_callback = None): buf = "" quit = False - while self.proc.returncode is None: + closed = False + while self.exporter_already_running or self.proc.returncode is None: try: d = self.conn.recv(4096) if len(d): @@ -72,12 +77,16 @@ buf = buf[2+buf_len:] if not msg_callback(msg): quit = True + else: + quit = True + closed = True except socket.error, e: if e.args[0] == errno.EWOULDBLOCK or e.args[0] == errno.EAGAIN: pass else: print e quit = True + closed = True if not quit and self.use_stdin and self.stdin.qsize(): line = self.stdin.get() if line == "": @@ -86,12 +95,15 @@ if not stdin_callback(line): quit = True if quit: - self.send_json({"command":"exit"}) + if not closed: + self.send_json({"command":"exit"}) self.conn.close() self.sock.close() - self.proc.kill() + if not self.exporter_already_running: + self.proc.kill() sys.exit(1) - self.proc.poll() + if not self.exporter_already_running: + self.proc.poll() if self.conn: self.conn.close() diff --git a/exporter.py b/exporter.py index bd73c42..d67d1f4 100755 --- a/exporter.py +++ b/exporter.py @@ -10,13 +10,36 @@ from args import * from job import * from driver import * + +top_level = {("--port","-p"):"wrapper_communication_port", \ + ("--debug","-d"):None} + +per_arg = {("--out","-o"):"out_dir", \ + ("--base","-b"):"base_dir"} + +top_level_all = [k[0][2:] for k in top_level] + +def desc_args(args): + return " ".join(["[" + "/".join(k) + ("" if args[k] is None else " " + args[k]) + "]" for k in args.keys()]) + +def list_long_args(args): + long_args = [k[0] for k in args] + ret = ", ".join(long_args[:-1]) + if len(long_args) >= 2: + ret += " or " + long_args[-1] + return ret + +top_level_desc = desc_args(top_level) +top_level_args = list_long_args(top_level) + +per_arg_desc = desc_args(per_arg) def usage(): - print "usage 1: ./exporter.py [--port/-p wrapper_communication_port] [--base/-b base_dir] [--out/-o out_dir] input_file1.src,input_file2.src,..." + print "usage 1: ./exporter.py " + top_level_desc + " " + per_arg_desc + " input_file1.src,input_file2.src,..." print " Exports the assets specified in the given source file(s)" print - print "usage 2: ./exporter.py [--port/-p wrapper_communication_port] [--base/-b base_dir] [--out/-o out_dir] -" - print " Reads full command lines (everything except --port) as lines from stdin" + print "usage 2: ./exporter.py " + top_level_desc + " -" + print " Reads full command lines (everything except " + per_arg_desc + ") as lines from stdin" print print "usage 3: ./export.py --help|-h" print " Shows this help message" @@ -47,7 +70,7 @@ jobs = {} sent_all_jobs = False -driver = Driver(port, from_stdin) +driver = Driver(port, from_stdin, exporter_already_running = "debug" in args) def send_cmd(cmd, **kwargs): global driver @@ -87,17 +110,21 @@ return False return True parts = shlex.split(line) - (err, line_args) = ArgParser.parse_args(parts) + (err, line_args) = ArgParser().parse_args(parts) if err is not None: print err else: + for a in top_level_all: + if a in line_args: + print "Top level args may not be passed in stdin: " + top_level_args + return True for i in line_args["input"]: try: job = Job(in_file = i) jobs[job.id] = job + send_job(job) except Exception, e: print e - send_job(job) return True def handle_command(msg_str): diff --git a/session.vim b/session.vim index 81da199..574e3ff 100644 --- a/session.vim +++ b/session.vim @@ -2,10 +2,10 @@ if &cp | set nocp | endif let s:cpo_save=&cpo set cpo&vim -imap -inoremap pumvisible() ? "\" : "\" -inoremap pumvisible() ? "\" : "\" inoremap pumvisible() ? "\" : "\" +inoremap pumvisible() ? "\" : "\" +inoremap pumvisible() ? "\" : "\" +imap nnoremap  :TmuxNavigateLeft nnoremap :TmuxNavigateDown nnoremap  :TmuxNavigateUp @@ -31,6 +31,7 @@ set helplang=en set hidden set nomodeline +set printoptions=paper:letter set ruler set runtimepath=~/.vim,~/.vim/bundle/JustDo,~/.vim/bundle/YouCompleteMe,~/.vim/bundle/vim-easymotion,~/.vim/bundle/vim-tmux-navigator,~/.vim/bundle/yats.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/vim74,/usr/share/vim/vimfiles/after,/var/lib/vim/addons/after,~/.vim/after set sessionoptions=blank,buffers,folds,help,options,tabpages,winsize,sesdir @@ -48,10 +49,10 @@ badd +1 exporter.py badd +1 driver.py badd +1 job.py -badd +0 args.py +badd +1 args.py argglobal silent! argdel * -edit args.py +edit exporter.py set splitbelow splitright set nosplitbelow set nosplitright @@ -166,7 +167,7 @@ setlocal wrap setlocal wrapmargin=0 silent! normal! zE -let s:l = 1 - ((0 * winheight(0) + 20) / 40) +let s:l = 1 - ((0 * winheight(0) + 27) / 55) if s:l < 1 | let s:l = 1 | endif exe s:l normal! zt