diff --git a/libsrc/debugswf/com/jpexs/decompiler/flash/debugger/DebugConnection.as b/libsrc/debugswf/com/jpexs/decompiler/flash/debugger/DebugConnection.as
index 46b25b6dc..e0fb8ff87 100644
--- a/libsrc/debugswf/com/jpexs/decompiler/flash/debugger/DebugConnection.as
+++ b/libsrc/debugswf/com/jpexs/decompiler/flash/debugger/DebugConnection.as
@@ -11,7 +11,6 @@
private static var s:Socket;
private static var q = [];
- private static var first:Boolean = true;
private static var inited:Boolean = false;
private static var name:String;
private static var failed:Boolean = false;
@@ -34,12 +33,16 @@
public static const MSG_DUMP_BYTEARRAY = 3;
public static const MSG_REQUEST_BYTEARRAY = 4;
public static const MSG_LOADER_URL_INFO = 5;
- public static const MSG_LOADER_MODIFY_BYTES = 6;
+ public static const MSG_LOADER_MODIFY_BYTES = 6;
+
+ private static var connected:Boolean = false;
+
+ public static const SHOW_TRACE = false;
private static function sendQueue(){
+ if (SHOW_TRACE) trace("debugswf: client " + name + " sending queue");
var qo = q;
q = [];
- sendHeader();
for each(var m in qo){
writeMsg(m.data,m.type);
}
@@ -103,25 +106,30 @@
if(inited){
return;
}
+ if (SHOW_TRACE) trace("debugswf: initing client " + sname);
name = sname;
inited = true;
try {
- s = new Socket();
+ s = new Socket();
s.addEventListener(Event.CONNECT, onSocketConnect);
s.addEventListener(ProgressEvent.SOCKET_DATA, onSocketData);
var port:int = 0;
- port = 123456;
+ port = 123456;
+ if (SHOW_TRACE) trace("debugswf: connecting client " + sname + " to localhost:" + port) ;
s.connect("localhost",port);
inited = true;
} catch (e:SecurityError) {
- trace("Debugger helper failed to connect to localhost");
+ if (SHOW_TRACE) trace("Debugger helper failed to connect to localhost");
failed = true;
}
}
private static function onSocketConnect(event:Event):void {
- sendQueue();
+ if (SHOW_TRACE) trace("debugswf: client " + name + " connected");
+ sendHeader();
+ connected = true;
+ sendQueue();
}
@@ -150,8 +158,10 @@
} else {
ba.position = pos;
}
+ if (SHOW_TRACE) trace("debugswf: client " + name + " received bytearray of " + ba.length + " bytes");
var onComplete = fillByteArraysEvents.pop();
if (onComplete != null) {
+ if (SHOW_TRACE) trace("debugswf: client " + name + " calling onComplete");
onComplete.call(onComplete);
}
}
@@ -200,15 +210,11 @@
}
private static function sendHeader() {
- if (!first) {
- return;
- }
if (!s.connected) {
return;
}
writeStringNull("debug.version.major="+DEBUG_VERSION_MAJOR+";debug.version.minor="+DEBUG_VERSION_MINOR);
writeString(name);
- first = false;
}
public static function writeMsg(msg,msgType=0){
@@ -216,7 +222,9 @@
return;
}
if(!inited) {
- initClient("");
+ var max:int = 100000;
+ var randomInt:int = Math.floor(Math.random() * (max + 1));
+ initClient("rand" + randomInt);
}
if ((msg is ByteArray) && msgType == MSG_DUMP_BYTEARRAY) {
var ba2:ByteArray = new ByteArray();
@@ -224,9 +232,9 @@
msg = ba2;
}
- if(s.connected){
- sendHeader();
- s.writeByte(msgType);
+ if(connected) {
+ if (SHOW_TRACE) trace("debugswf: client " + name +" sending msg " + msgType);
+ s.writeByte(msgType);
switch(msgType){
case MSG_STRING:
writeString(msg);
@@ -242,6 +250,7 @@
break;
case MSG_REQUEST_BYTEARRAY:
fillByteArrays.push(msg);
+ fillByteArraysEvents.push(null);
break;
case MSG_LOADER_MODIFY_BYTES:
writeString(msg["url"]);
@@ -251,7 +260,9 @@
break;
}
s.flush();
+ if (SHOW_TRACE) trace("debugswf: client " + name +" msg " + msgType + " sent");
}else{
+ if (SHOW_TRACE) trace("debugswf: client " + name +" pushing msg " + msgType + " to queue");
q.push({type:msgType,data:msg});
}
}
diff --git a/libsrc/ffdec_lib/testdata/debug_inner/inner.swf b/libsrc/ffdec_lib/testdata/debug_inner/inner.swf
index 0a7bf764f..050b03ad6 100644
Binary files a/libsrc/ffdec_lib/testdata/debug_inner/inner.swf and b/libsrc/ffdec_lib/testdata/debug_inner/inner.swf differ
diff --git a/libsrc/ffdec_lib/testdata/debug_inner/inner/obj/InnerSWFConfig.old b/libsrc/ffdec_lib/testdata/debug_inner/inner/obj/InnerSWFConfig.old
index 3fb908ad7..ec4ea7bee 100644
--- a/libsrc/ffdec_lib/testdata/debug_inner/inner/obj/InnerSWFConfig.old
+++ b/libsrc/ffdec_lib/testdata/debug_inner/inner/obj/InnerSWFConfig.old
@@ -16,7 +16,7 @@
CONFIG::timeStamp
- '04.08.2024'
+ '05.08.2024'
CONFIG::air
@@ -32,12 +32,12 @@
true
- C:\FlashRelated\test_debugger\inner_debug\inner\src
+ C:\Dropbox\Programovani\JavaSE\FFDec\libsrc\ffdec_lib\testdata\debug_inner\inner\src
C:\Program Files (x86)\FlashDevelop\Library\AS3\classes
- C:\FlashRelated\test_debugger\inner_debug\inner\src\InnerMain.as
+ C:\Dropbox\Programovani\JavaSE\FFDec\libsrc\ffdec_lib\testdata\debug_inner\inner\src\InnerMain.as
#FFFFFF
30
diff --git a/libsrc/ffdec_lib/testdata/debug_inner/inner/obj/InnerSWFConfig.xml b/libsrc/ffdec_lib/testdata/debug_inner/inner/obj/InnerSWFConfig.xml
index 3fb908ad7..ec4ea7bee 100644
--- a/libsrc/ffdec_lib/testdata/debug_inner/inner/obj/InnerSWFConfig.xml
+++ b/libsrc/ffdec_lib/testdata/debug_inner/inner/obj/InnerSWFConfig.xml
@@ -16,7 +16,7 @@
CONFIG::timeStamp
- '04.08.2024'
+ '05.08.2024'
CONFIG::air
@@ -32,12 +32,12 @@
true
- C:\FlashRelated\test_debugger\inner_debug\inner\src
+ C:\Dropbox\Programovani\JavaSE\FFDec\libsrc\ffdec_lib\testdata\debug_inner\inner\src
C:\Program Files (x86)\FlashDevelop\Library\AS3\classes
- C:\FlashRelated\test_debugger\inner_debug\inner\src\InnerMain.as
+ C:\Dropbox\Programovani\JavaSE\FFDec\libsrc\ffdec_lib\testdata\debug_inner\inner\src\InnerMain.as
#FFFFFF
30
diff --git a/libsrc/ffdec_lib/testdata/debug_inner/inner/src/InnerMain.as b/libsrc/ffdec_lib/testdata/debug_inner/inner/src/InnerMain.as
index 710cb6b23..028dc8a01 100644
--- a/libsrc/ffdec_lib/testdata/debug_inner/inner/src/InnerMain.as
+++ b/libsrc/ffdec_lib/testdata/debug_inner/inner/src/InnerMain.as
@@ -2,6 +2,8 @@ package
{
import flash.display.Sprite;
import flash.events.Event;
+ import flash.text.TextField;
+ import flash.text.TextFormat;
public class InnerMain extends Sprite
{
@@ -13,10 +15,24 @@ package
else addEventListener(Event.ADDED_TO_STAGE, init);
}
- private function init(e:Event = null):void
+ private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
- // entry point
+
+ var textField:TextField = new TextField();
+
+ textField.text = "Main inner1.";
+
+ var textFormat:TextFormat = new TextFormat();
+ textFormat.size = 24;
+ textFormat.color = 0x000000;
+ textField.setTextFormat(textFormat);
+ textField.width = 200;
+
+ addChild(textField);
+
+ textField.x = 50;
+ textField.y = 125;
}
}
diff --git a/libsrc/ffdec_lib/testdata/debug_inner/inner/src/MyInnerClass.as b/libsrc/ffdec_lib/testdata/debug_inner/inner/src/MyInnerClass.as
index b90f7d2ad..7e78e7891 100644
--- a/libsrc/ffdec_lib/testdata/debug_inner/inner/src/MyInnerClass.as
+++ b/libsrc/ffdec_lib/testdata/debug_inner/inner/src/MyInnerClass.as
@@ -43,14 +43,17 @@ package
var byteArray:ByteArray = new binaryData2Class() as ByteArray;
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderComplete);
+ //trace("loading innerSwf 2");
loader.loadBytes(byteArray);
}
private function onLoaderComplete(event:Event):void {
var loaderInfo:LoaderInfo = event.target as LoaderInfo;
var className:String = "MyInnerClass2";
+ //trace("getting definition of " + className);
var LoadedClass:Class = loaderInfo.applicationDomain.getDefinition(className) as Class;
var instance:* = new LoadedClass();
+ //trace("calling innerSwf 2 instance");
instance.run(root);
}
diff --git a/libsrc/ffdec_lib/testdata/debug_inner/inner2.swf b/libsrc/ffdec_lib/testdata/debug_inner/inner2.swf
index da6ab5aef..b9d6125fd 100644
Binary files a/libsrc/ffdec_lib/testdata/debug_inner/inner2.swf and b/libsrc/ffdec_lib/testdata/debug_inner/inner2.swf differ
diff --git a/libsrc/ffdec_lib/testdata/debug_inner/inner2/InnerSWF2.as3proj b/libsrc/ffdec_lib/testdata/debug_inner/inner2/InnerSWF2.as3proj
index 2bf448b4c..e8b2f5171 100644
--- a/libsrc/ffdec_lib/testdata/debug_inner/inner2/InnerSWF2.as3proj
+++ b/libsrc/ffdec_lib/testdata/debug_inner/inner2/InnerSWF2.as3proj
@@ -4,7 +4,7 @@