?? panel0.as
字號:
?class Scene.Manage.Panels.Group1.Panel0 extends MovieClip {
//Const
var dayOfWeek_array:Array = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
//Flashcom
private var appLogStream;
private var fullDumpStream;
//Should be :NetStream but then compiler throws a wobly about onLog method
//UI Eliments
private var logText:MovieClip;
//0
private var checkBox1:MovieClip;
//1
private var checkBox2:MovieClip;
//2
private var checkBox3:MovieClip;
//3
private var clearBtn:MovieClip;
//4
private var KeyWords:Array = ["true", "false", "Boolean", "Number", "String",
"Function", "Object", "object ","Admin found:",
"User connected:", "Logging out:"];
private var BuiltInPhrase:Array = ["FCApplication loaded successfully","Communication Framework loaded successfully.",
"Unloaded application instance", "Playing and resetting", "Pausing",
"Unpausing", "Started playing", "Stopped playing", "Recording",
"Failed to record", "New NetStream created", "NetStream deleted",
"Publishing", "Failed to publish", "Failed to restart virtual host",
"Connection to FlashCom has been disconnected.", "Failed to play",
"Play stop failed", "Audio receiving", "Failed to enable audio",
"Failed to stop playing", "Video receiving", "Set video fps",
"Failed to receive", "Seeking", "Failed to seek"];
//
private var ColorKeyword:String = "#000084";
private var ColorComment:String = "#AE0000";
private var ColorString:String = "#0000FF";
//
private var Lines:Array = new Array();
private var ColapseData:Object = new Object();
private var ColapseCheck:Object = new Object();
private var IgnoreLine:String = "";
//
private var objectCopyRefs:Array = new Array();
//
function Panel0() {
//Attach Assets
attachMovie("TextArea", "logText", 0);
attachMovie("CheckBox", "checkBox1", 1);
attachMovie("CheckBox", "checkBox2", 2);
attachMovie("CheckBox", "checkBox3", 3);
attachMovie("Button", "clearBtn", 4);
//Work Assets
logText._x = 20;
logText._y = 45;
logText.editable = false;
logText.html = true;
//
checkBox1.label = "Time Stamp";
checkBox1._x = 20;
//
checkBox2._x = 20;
checkBox2._y = 21;
checkBox2.label = "Data Types";
//
checkBox3._x = 120;
checkBox3.label = "Dump Complex Data";
checkBox3.selected = true;
checkBox3.setSize(140, 22);
//
clearBtn.label = "Clear";
clearBtn._y = 10;
clearBtn.addEventListener("click", this);
}
//Events
function click(evt) {
logText.text = "";
Lines = new Array();
ColapseData = new Object();
ColapseCheck = new Object();
IgnoreLine = "";
}
//
function activate() {
//
appLogStream = new NetStream(_global.Connection.Net);
var p = this;
appLogStream.onLog = function(info) {
var strIn = info.description;
//
if (strIn.substr(0, 10) == ":@zf_dump:") {
var encodeStr = strIn.substr(10, strIn.length - 10);
//__par.convertToObject(encodeStr)
var o = p.convertToObject(encodeStr);
p.traceObject(o);
} else {
p.traceObject(info.description);
}
};
appLogStream.play("logs/application/"+_global.selectedApplication, -1);
//
}
function deactivate(){
appLogStream.close();
}
//Lots and lots of code for various things, tracing out objects
//converting my encoding object string to a real object
//etc
function traceObject(obj) {
var typeString = typeof (obj);
typeString = "<B>"+typeString.slice(0, 1).toUpperCase()+typeString.slice(1, typeString.length)+"</B>";
//
if (typeof (obj) == "object" && checkBox3.selected == true) {
var method = this+".doColapse";
var args = Lines.length+":"+0;
//
var link = "<a href='asfunction:"+method+","+args+"'>";
//
var linkEnd = "</a>";
//
var method = this+".doCopy";
objectCopyRefs.push(obj.toString());
var args = objectCopyRefs.length-1;
//
var copyLink = "<a href='asfunction:"+method+","+args+"'>";
//
ColapseCheck[Lines.length+":"] = false;
appendText(link+"[object Object]"+linkEnd+copyLink+"<font color='#FF0000' size='10'><b> :copy:</b></font>"+linkEnd, 0);
var offset = " ";
populateSubObject(obj, offset);
} else {
if (checkBox2.selected == true) {
appendText(obj+" - :"+typeString, 0);
} else {
appendText(obj.toString()+"", 0);
}
}
}
function doCopy(data){
System.setClipboard(objectCopyRefs[Number(data)]);
}
function doColapse(data){
var a = data.split(":");
var line = Number(a[0]);
var offset = Number(a[1]);
//
if(!ColapseData[line]){
ColapseData[line] = new Array();
}
if(ColapseCheck[line+":"] == false){
//Close
for(var i=line+1;i<Lines.length;i++){
var l = Lines[i];
if(l.o > offset){
ColapseData[line].push(i);
IgnoreLine += ","+i+",";
}else{
break;
}
}
ColapseCheck[line+":"] = true;
relog();
}else{
//Open
var over_ride:String = "";
for(var i=0;i<ColapseData[line].length;i++){
var l = ColapseData[line][i];
//
if(ColapseCheck[l+":"] == true){
for(var o=0;o<ColapseData[l].length;o++){
over_ride += ","+ColapseData[l][o]+",";
}
}
if(over_ride.indexOf(","+l+",") == -1){
IgnoreLine = IgnoreLine.split(","+l+",").join("");
}
}
ColapseCheck[line+":"] = false;
relog();
}
}
function relog(){
var p = logText.vPosition;
logText.text = "";
for(var i=0;i<Lines.length;i++){
if(IgnoreLine.indexOf(","+i+",") == -1){
logText.text += Lines[i].text;
}
}
logText.vPosition = p;
}
function countSpaces(str){
var s = "";
for(var i=str.indexOf(" ");i<str.length;i++){
if(str.substr(i, 1) == " "){
s += " ";
}else{
break;
}
}
return s.length;
}
function populateSubObject(data, offset) {
for (var i in data) {
if (typeof (data[i]) == "object") {
//
var method = this+".doColapse";
var args = Lines.length+":"+countSpaces(offset).toString();
//
var link = "<a href='asfunction:"+method+","+args+"'>";
//
var linkEnd = "</a>";
ColapseCheck[Lines.length+":"] = false;
//
var method = this+".doCopy";
objectCopyRefs.push(data[i].toString());
var args = objectCopyRefs.length-1;
//
var copyLink = "<a href='asfunction:"+method+","+args+"'>";
//
appendText(link+offset+"[object Object: "+"<font color='"+ColorKeyword+"'>"+"name</font> = "+i+": "+"<font color='"+ColorKeyword+"'>"+"length</font> = "+i.length+"]"+linkEnd+copyLink+"<font color='#FF0000' size='10'><b> :copy:</b></font>"+linkEnd, countSpaces(offset));
populateSubObject(data[i], offset+" ");
} else {
if (checkBox2.selected == true) {
var typeString = typeof (data[i]);
typeString = "<B>"+typeString.slice(0, 1).toUpperCase()+typeString.slice(1, typeString.length)+"</B>";
//
var s = data[i];
if(typeof(s) == "string"){
s = "<font color='"+ColorString+"'>"+'"'+s+'"'+"</font>";
}
//
appendText(offset+i+" = "+s+"; - :"+typeString, countSpaces(offset));
} else {
var s = data[i];
if(typeof(s) == "string"){
s = "<font color='"+ColorString+"'>"+'"'+s+'"'+"</font>";
}
appendText(offset+i+" = "+s+";", countSpaces(offset));
}
}
}
}
function appendText(txt, offset) {
if (txt.indexOf("fcz_fcs_admin_log") == -1) {
//This is not a useful log, its just telling us we are
//connected to the admin stream
var color = "#000000";
var original = txt;
//
for(var i=0;i<KeyWords.length;i++){
var rV = KeyWords[i];
txt = txt.split(rV).join("<font color='"+ColorKeyword+"'>"+rV+"</font>");
}
for(var i=0;i<BuiltInPhrase.length;i++){
if(original.indexOf(BuiltInPhrase[i]) != -1){
txt = "<font color='"+ColorComment+"'> > "+original+"</font>";
//Can break its already red
break;
}
}
//
var fontPrefix:String = "<font face='Verdana' size='10' color='"+color+"'>";
var fontSuffix:String = "</font><br>";
var StampString = "";
//
if (checkBox1.selected == true) {
var my_date:Date = new Date();
var hourObj:Object = getHoursAmPm(my_date.getHours());
StampString = dayOfWeek_array[my_date.getDay()]+" "+hourObj.hours+":"+my_date.getMinutes()+" "+hourObj.ampm+": ";
}
if (logText.text == "") {
if (checkBox1.selected == true) {
var t = fontPrefix+StampString+txt+fontSuffix;
Lines.push({text:t, o:offset});
logText.text = t;
} else {
var t = fontPrefix+txt+fontSuffix;
Lines.push({text:t, o:offset});
logText.text = t;
}
} else {
if (checkBox1.selected == true) {
var t = fontPrefix+StampString+txt+fontSuffix;
Lines.push({text:t, o:offset});
logText.text += t;
} else {
var t = fontPrefix+txt+fontSuffix;
Lines.push({text:t, o:offset});
logText.text += t;
}
}
logText.vPosition = logText.maxVPosition+10;
}
}
function getHoursAmPm(hour24:Number):Object {
var returnObj:Object = new Object();
returnObj.ampm = (hour24<12) ? "AM" : "PM";
var hour12:Number = hour24%12;
if (hour12 == 0) {
hour12 = 12;
}
returnObj.hours = hour12;
return returnObj;
}
//this converts an object as an {type, val, leve} to real objects
function itemToObject(item) {
if (item.type == 0) {
//Object, needs deeper processing
var oa = splitStringExpress(item.val, item.level+1);
return processObjectArray(oa);
} else {
//
if (item.type == 1) {
//String
return item.val;
} else if (item.type == 2) {
//Number
return Number(item.val);
} else if (item.type == 3) {
//Boolean
if (item.val == "true") {
return true;
} else {
return false;
}
} else if (item.type == 4) {
//Function
return function () {
};
}
}
}
//This method will take an object array created from the splitStringExpress
//method and turns it into real objects
function processObjectArray(ary) {
var obj = new Object();
//type:typeRef[Number(datInt)]
for (var i = 0; i<ary.length; i++) {
var item = ary[i];
obj[item.name] = itemToObject(item);
}
return obj;
}
//This method splits up an encoded string into an array of object reprisentations
//based on the level, i added a level value to make my life easyer
//a while back i built one that converts object to {...} reprisentation
//but converting it back was dificult
function splitStringExpress(str, level) {
var lookStr = "?"+level+":";
var sPoint = 0;
var retArray = new Array();
for (var i = 0; i<str.length; i++) {
var i = str.indexOf(lookStr, sPoint);
if (i == -1) {
break;
} else {
var datInsP = i+lookStr.length;
var datInt = str.substr(datInsP, 1);
var endStr = datInt+":"+level+"?";
//p,2,2:0?,
var endPoint = str.indexOf(endStr, i);
var objectString = str.slice(i+lookStr.length+2, endPoint-1);
//o,1
var pName = objectString.slice(0, objectString.indexOf(","));
var pContent = objectString.split(pName+",")[1];
//
retArray.push({type:datInt, name:pName, val:pContent, level:level});
//
var len = lookStr.length;
//Start bit eg ?0:
len += 2;
//the data type and comma
len += pName.length;
len += 1;
//Comma
len += pContent.length;
len += 1;
//Comma
len += endStr.length;
//
sPoint += len;
}
}
return retArray;
}
//This is the main convert method
function convertToObject(string) {
var res = new Object();
if (string.substr(0, 2) == "s?") {
//Single Value
var typeID = string.substr(2, 1);
var dat = string.split("s?"+typeID+",")[1];
var item = {type:Number(typeID), val:dat};
res = itemToObject(item);
} else {
//Complex data type
res = processObjectArray(splitStringExpress(string, 0));
}
return res;
}
//
function setSize(w:Number, h:Number) {
logText.setSize(w-40, h-63);
clearBtn._x = (w-130);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -