Files
jpexs-decompiler/libsrc/debugswf/com/jpexs/decompiler/flash/debugger/DebugConnection.as
Jindra Petřík bd6c953218 Fixed Incorrect debugger line numbers when "Open loaded while playing" is enabled
Fixed AS3 debugger - Slow injecting debug info - now faster
Fixed AS3 debugger - obfuscated classes debugging
Fixed Delayed open loaded SWFs while playing
Fixed AS3 Direct editation - script initializer for main document class

Changed Wrong unicode escape `{invalid_utf8:xxx}` changed to `{invalid_utf8=xxx}` for compatibility with file names
2023-12-30 18:06:08 +01:00

156 lines
3.6 KiB
ActionScript

package com.jpexs.decompiler.flash.debugger {
import flash.net.Socket;
import flash.utils.ByteArray;
import flash.events.Event;
import flash.display.Sprite;
public class DebugConnection {
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;
public static const DEBUG_VERSION_MAJOR = 1;
public static const DEBUG_VERSION_MINOR = 2;
public static const MSG_STRING = 0;
public static const MSG_LOADER_URL = 1;
public static const MSG_LOADER_BYTES = 2;
public static const MSG_LONGSTRING = 3;
public static const MSG_LOADER_URL_GETBYTES = 4;
public static const MSG_LOADER_BYTES_GETBYTES = 5;
private static function sendQueue(){
var qo = q;
q = [];
for each(var m in qo){
writeMsg(m.data,m.type);
}
}
private static function writeStringNull(msg){
var b:ByteArray = new ByteArray();
b.writeUTFBytes(msg);
s.writeBytes(b,0,b.length);
s.writeByte(0);
}
private static function writeString(msg){
var b:ByteArray = new ByteArray();
b.writeUTFBytes(msg);
s.writeByte((b.length>>8) & 0xff);
s.writeByte(b.length & 0xff);
s.writeBytes(b,0,b.length);
}
private static function writeLongString(msg){
var b:ByteArray = new ByteArray();
b.writeUTFBytes(msg);
writeBytes(b);
}
private static function writeBytes(b:ByteArray){
s.writeByte((b.length>>24) & 0xff);
s.writeByte((b.length>>16) & 0xff);
s.writeByte((b.length>>8) & 0xff);
s.writeByte(b.length & 0xff);
s.writeBytes(b,0,b.length);
}
private static function readBytes():ByteArray {
var b:ByteArray = new ByteArray();
var a1 = s.readUnsignedByte();
var a2 = s.readUnsignedByte();
var a3 = s.readUnsignedByte();
var a4 = s.readUnsignedByte();
var len = (a1<<24)+(a2<<16)+(a3<<8)+a4;
s.readBytes(b,0,len);
return b;
}
private static function readString():String {
var b:ByteArray = new ByteArray();
var a1 = s.readUnsignedByte();
var a2 = s.readUnsignedByte();
var len = (a1<<8)+a2;
return s.readUTFBytes(len);
}
private static function readLongString():String {
var b:ByteArray = readBytes();
return b.readUTFBytes(b.length);
}
public static function initClient(sname){
if(inited){
return;
}
name = sname;
inited = true;
s = new Socket();
s.addEventListener(Event.CONNECT, function(){
sendQueue();
});
var port:int = 0;
port = 123456;
s.connect("localhost",port);
inited = true;
}
public static function writeLoaderURL(url){
writeMsg(url,MSG_LOADER_URL);
}
public static function writeLoaderBytes(data:ByteArray){
writeMsg(data,MSG_LOADER_BYTES);
}
public static function writeMsg(msg,msgType=0){
if(!inited){
initClient("");
}
if(s.connected){
if(first){
//s.writeByte(0);
writeStringNull("debug.version.major="+DEBUG_VERSION_MAJOR+";debug.version.minor="+DEBUG_VERSION_MINOR);
writeString(name);
first = false;
}
s.writeByte(msgType);
switch(msgType){
case MSG_STRING:
writeString(msg);
break;
case MSG_LOADER_URL:
writeString(msg);
break;
case MSG_LOADER_BYTES:
writeBytes(msg);
break;
case MSG_LOADER_URL_GETBYTES:
writeString(msg);
break;
case MSG_LOADER_BYTES_GETBYTES:
writeBytes(msg);
break;
}
s.flush();
}else{
q.push({type:msgType,data:msg});
}
}
}
}