openfl
Version:
A fast, productive library for 2D cross-platform development.
363 lines (345 loc) • 11.7 kB
JavaScript
// Class: openfl.utils._internal.format.amf3.AMF3Reader
var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this
$global.Object.defineProperty(exports, "__esModule", {value: true});
var __map_reserved = {};
// Imports
var $hxClasses = require("./../../../../../hxClasses_stub").default;
var $hxEnums = require("./../../../../../hxEnums_stub").default;
var $import = require("./../../../../../import_stub").default;
function openfl_utils__$internal_format_amf3_AMF3Tools() {return require("./../../../../../openfl/utils/_internal/format/amf3/AMF3Tools");}
function js__$Boot_HaxeError() {return require("./../../../../../js/_Boot/HaxeError");}
function openfl_utils__$internal_format_amf3_AMF3Value() {return require("./../../../../../openfl/utils/_internal/format/amf3/AMF3Value");}
function js_Boot() {return require("./../../../../../js/Boot");}
function openfl_utils_IExternalizable() {return require("./../../../../../openfl/utils/IExternalizable");}
function openfl_utils__$internal_format_amf3_AMF3ReaderInput() {return require("./../../../../../openfl/utils/_internal/format/amf3/AMF3ReaderInput");}
function haxe_ds_StringMap() {return require("./../../../../../haxe/ds/StringMap");}
function haxe_ds_EnumValueMap() {return require("./../../../../../haxe/ds/EnumValueMap");}
function openfl__$Vector_Vector_$Impl_$() {return require("./../../../../../openfl/_Vector/Vector_Impl_");}
function haxe_io_Bytes() {return require("./../../../../../haxe/io/Bytes");}
function openfl_utils__$ByteArray_ByteArray_$Impl_$() {return require("./../../../../../openfl/utils/_ByteArray/ByteArray_Impl_");}
function haxe_io_Encoding() {return require("./../../../../../haxe/io/Encoding");}
function Xml() {return require("./../../../../../Xml");}
// Constructor
var AMF3Reader = function(i,parent) {
if(parent == null) {
this.complexObjectsTable = [];
this.objectTraitsTable = [];
this.stringTable = [];
} else {
this.complexObjectsTable = parent.complexObjectsTable;
this.objectTraitsTable = parent.objectTraitsTable;
this.stringTable = parent.stringTable;
}
this.i = i;
i.set_bigEndian(true);
}
// Meta
AMF3Reader.__name__ = "openfl.utils._internal.format.amf3.AMF3Reader";
AMF3Reader.__isInterface__ = false;
AMF3Reader.prototype = {
readObject: function() {
var dyn = false;
var isExternalizable = false;
var className = null;
var sealedMemberNames = [];
var n = this.readInt();
if((n & 1) == 0) {
return this.complexObjectsTable[n >> 1];
} else if((n & 3) == 1) {
n >>= 2;
var refTraits = this.objectTraitsTable[n];
dyn = refTraits.isDynamic;
isExternalizable = refTraits.isExternalizable;
className = refTraits.className;
sealedMemberNames = refTraits.sealedMemberNames;
} else if((n & 7) == 3) {
dyn = (n >> 3 & 1) == 1;
n >>= 4;
className = this.readString();
var _g = 0;
var _g1 = n;
while(_g < _g1) {
var j = _g++;
sealedMemberNames.push((openfl_utils__$internal_format_amf3_AMF3Tools().default).decode(this.readString()));
}
this.objectTraitsTable.push({ isExternalizable : isExternalizable, isDynamic : dyn, className : className, sealedMemberNames : sealedMemberNames});
} else if((n & 7) == 7) {
isExternalizable = true;
className = this.readString();
} else {
throw new (js__$Boot_HaxeError().default)("Invalid object traits");
}
var ret = null;
if(isExternalizable) {
var o = (openfl_utils__$internal_format_amf3_AMF3Tools().default).object((openfl_utils__$internal_format_amf3_AMF3Value().default).AObject(null,null,(openfl_utils__$internal_format_amf3_AMF3Tools().default).decode(className)));
if(o != null && (js_Boot().default).__implements(o,(openfl_utils_IExternalizable().default))) {
var external = o;
external.readExternal(new (openfl_utils__$internal_format_amf3_AMF3ReaderInput().default)(this));
ret = (openfl_utils__$internal_format_amf3_AMF3Value().default).AExternal(external);
} else {
ret = (openfl_utils__$internal_format_amf3_AMF3Value().default).ANull;
}
} else {
var h = new (haxe_ds_StringMap().default)();
ret = (openfl_utils__$internal_format_amf3_AMF3Value().default).AObject(h,null,className != null ? (openfl_utils__$internal_format_amf3_AMF3Tools().default).decode(className) : null);
var _g2 = 0;
var _g11 = sealedMemberNames.length;
while(_g2 < _g11) {
var j1 = _g2++;
var value = this.read();
h.set(sealedMemberNames[j1],value);
}
if(dyn) {
var s;
while(true) {
s = (openfl_utils__$internal_format_amf3_AMF3Tools().default).decode(this.readString());
if(s == "") {
break;
}
h.set(s,this.read());
}
}
}
this.complexObjectsTable.push(ret);
return ret;
},
readMap: function() {
var n = this.readInt();
if((n & 1) == 0) {
return this.complexObjectsTable[n >> 1];
}
n >>= 1;
var h = new (haxe_ds_EnumValueMap().default)();
var ret = (openfl_utils__$internal_format_amf3_AMF3Value().default).AMap(h);
this.complexObjectsTable.push(ret);
this.i.readByte();
var _g = 0;
var _g1 = n;
while(_g < _g1) {
var i = _g++;
h.set(this.read(),this.read());
}
return ret;
},
readArray: function() {
var n = this.readInt();
if((n & 1) == 0) {
return this.complexObjectsTable[n >> 1];
}
n >>= 1;
var a = [];
var m = new (haxe_ds_StringMap().default)();
var ret = (openfl_utils__$internal_format_amf3_AMF3Value().default).AArray(a,m);
this.complexObjectsTable.push(ret);
var assocName = (openfl_utils__$internal_format_amf3_AMF3Tools().default).decode(this.readString());
while(assocName.length != 0) {
var v = this.read();
m.set(assocName,v);
assocName = (openfl_utils__$internal_format_amf3_AMF3Tools().default).decode(this.readString());
}
var _g = 0;
var _g1 = n;
while(_g < _g1) {
var i = _g++;
a.push(this.read());
}
return ret;
},
readIntVector: function() {
var header = this.readInt();
if((header & 1) == 0) {
return this.complexObjectsTable[header >> 1];
}
var len = header >> 1;
var fixed = this.i.readByte() != 0;
var v = (openfl__$Vector_Vector_$Impl_$().default)._new(len);
v.fixed = fixed;
var _g = 0;
var _g1 = len;
while(_g < _g1) {
var r = _g++;
(openfl__$Vector_Vector_$Impl_$().default).set(v,r,this.i.readInt32());
}
var ret = (openfl_utils__$internal_format_amf3_AMF3Value().default).AIntVector(v);
this.complexObjectsTable.push(ret);
return ret;
},
readFloatVector: function() {
var header = this.readInt();
if((header & 1) == 0) {
return this.complexObjectsTable[header >> 1];
}
var len = header >> 1;
var fixed = this.i.readByte() != 0;
var v = (openfl__$Vector_Vector_$Impl_$().default)._new(len);
v.fixed = fixed;
var _g = 0;
var _g1 = len;
while(_g < _g1) {
var r = _g++;
(openfl__$Vector_Vector_$Impl_$().default).set(v,r,this.i.readDouble());
}
var ret = (openfl_utils__$internal_format_amf3_AMF3Value().default).AFloatVector(v);
this.complexObjectsTable.push(ret);
return ret;
},
readObjectVector: function() {
var header = this.readInt();
if((header & 1) == 0) {
return this.complexObjectsTable[header >> 1];
}
var len = header >> 1;
var fixed = this.i.readByte() != 0;
var type = (openfl_utils__$internal_format_amf3_AMF3Tools().default).decode(this.readString());
var v = (openfl__$Vector_Vector_$Impl_$().default)._new(len);
v.fixed = fixed;
var ret = (openfl_utils__$internal_format_amf3_AMF3Value().default).AObjectVector(v,type);
this.complexObjectsTable.push(ret);
var _g = 0;
var _g1 = len;
while(_g < _g1) {
var r = _g++;
(openfl__$Vector_Vector_$Impl_$().default).set(v,r,this.read());
}
return ret;
},
readByteArray: function() {
var n = this.readInt();
if((n & 1) == 0) {
return this.complexObjectsTable[n >> 1];
}
n >>= 1;
var b = (haxe_io_Bytes().default).alloc(n);
var _g = 0;
var _g1 = n;
while(_g < _g1) {
var j = _g++;
b.set(j,this.i.readByte());
}
var ba = (openfl_utils__$ByteArray_ByteArray_$Impl_$().default).fromBytes(b);
ba.set_endian("bigEndian");
ba.__amf3Reader = this;
var ret = (openfl_utils__$internal_format_amf3_AMF3Value().default).AByteArray(ba);
this.complexObjectsTable.push(ret);
return ret;
},
readInt: function(signExtend,preShift) {
if(preShift == null) {
preShift = 0;
}
if(signExtend == null) {
signExtend = false;
}
var c = this.i.readByte() & 255;
if(c < 128) {
return c >> preShift;
}
var ret = (c & 127) << 7;
c = this.i.readByte() & 255;
if(c < 128) {
return (ret | c) >> preShift;
}
ret |= c & 127;
ret <<= 7;
c = this.i.readByte() & 255;
if(c < 128) {
return (ret | c) >> preShift;
}
ret |= c & 127;
ret <<= 8;
c = this.i.readByte() & 255;
ret |= c;
if(signExtend && (ret & 268435456) != 0) {
ret |= -536870912;
}
return ret >> preShift;
},
readString: function() {
var header = this.readInt();
if((header & 1) == 0) {
var strRefIdx = header >> 1;
return this.stringTable[strRefIdx];
}
var len = header >> 1;
return this.readStringNoHeader(len);
},
readStringNoHeader: function(len) {
if(len == 0) {
return (openfl_utils__$internal_format_amf3_AMF3Value().default).AString("");
}
var ret = (openfl_utils__$internal_format_amf3_AMF3Value().default).AString(this.i.readString(len,(haxe_io_Encoding().default).UTF8));
this.stringTable.push(ret);
return ret;
},
readDate: function() {
var n = this.readInt();
if((n & 1) == 0) {
return this.complexObjectsTable[n >> 1];
}
var date = new Date(this.i.readDouble());
var ret = (openfl_utils__$internal_format_amf3_AMF3Value().default).ADate(date);
this.complexObjectsTable.push(ret);
return ret;
},
readXml: function() {
var n = this.readInt();
if((n & 1) == 0) {
return this.complexObjectsTable[n >> 1];
}
n >>= 1;
var xml = (Xml().default).parse((openfl_utils__$internal_format_amf3_AMF3Tools().default).decode(this.readStringNoHeader(n)));
var ret = (openfl_utils__$internal_format_amf3_AMF3Value().default).AXml(xml);
this.complexObjectsTable.push(ret);
return ret;
},
readWithCode: function(id) {
var i = this.i;
switch(id) {
case 0:
return (openfl_utils__$internal_format_amf3_AMF3Value().default).AUndefined;
case 1:
return (openfl_utils__$internal_format_amf3_AMF3Value().default).ANull;
case 2:
return (openfl_utils__$internal_format_amf3_AMF3Value().default).ABool(false);
case 3:
return (openfl_utils__$internal_format_amf3_AMF3Value().default).ABool(true);
case 4:
return (openfl_utils__$internal_format_amf3_AMF3Value().default).AInt(this.readInt(true));
case 5:
return (openfl_utils__$internal_format_amf3_AMF3Value().default).ANumber(i.readDouble());
case 6:
return this.readString();
case 7:
throw new (js__$Boot_HaxeError().default)("XMLDocument unsupported");
case 8:
return this.readDate();
case 9:
return this.readArray();
case 10:
return this.readObject();
case 11:
return this.readXml();
case 12:
return this.readByteArray();
case 13:case 14:
return this.readIntVector();
case 15:
return this.readFloatVector();
case 16:
return this.readObjectVector();
case 17:
return this.readMap();
default:
throw new (js__$Boot_HaxeError().default)("Unknown AMF " + id);
}
},
read: function() {
var byte = this.i.readByte();
return this.readWithCode(byte);
}
};
AMF3Reader.prototype.__class__ = AMF3Reader.prototype.constructor = $hxClasses["openfl.utils._internal.format.amf3.AMF3Reader"] = AMF3Reader;
// Init
// Statics
// Export
exports.default = AMF3Reader;