|
|
@ -1,70 +1,15 @@
|
|
|
|
|
|
|
|
/*jslint laxbreak:true */
|
|
|
|
|
|
|
|
/*jslint laxcomma:true */
|
|
|
|
|
|
|
|
/*jslint loopfunc:true */
|
|
|
|
|
|
|
|
/*jslint strict:true */
|
|
|
|
define([
|
|
|
|
define([
|
|
|
|
"toolbox"
|
|
|
|
"underscore"
|
|
|
|
|
|
|
|
, "toolbox"
|
|
|
|
]
|
|
|
|
]
|
|
|
|
, function (Toolbox) {
|
|
|
|
, function (_, Toolbox) {
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
|
|
var that
|
|
|
|
var that
|
|
|
|
, typeMap = {
|
|
|
|
|
|
|
|
1: {
|
|
|
|
|
|
|
|
length: 1
|
|
|
|
|
|
|
|
, unpack: Types.getInt8
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
, 2: {
|
|
|
|
|
|
|
|
length: 1
|
|
|
|
|
|
|
|
, unpack: Types.getUint8
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
, 3: {
|
|
|
|
|
|
|
|
length: 2
|
|
|
|
|
|
|
|
, unpack: Types.getInt16
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
, 4: {
|
|
|
|
|
|
|
|
length: 2
|
|
|
|
|
|
|
|
, unpack: Types.getUint16
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
, 5: {
|
|
|
|
|
|
|
|
length: 4
|
|
|
|
|
|
|
|
, unpack: Types.getInt32
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
, 6: {
|
|
|
|
|
|
|
|
length: 4
|
|
|
|
|
|
|
|
, unpack: Types.getUint32
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
, 7: {
|
|
|
|
|
|
|
|
length: 8
|
|
|
|
|
|
|
|
, unpack: Types.getFloat64
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// There is no unsigned 64bit integer in JS.
|
|
|
|
|
|
|
|
, 8: {
|
|
|
|
|
|
|
|
length: 8
|
|
|
|
|
|
|
|
, unpack: Types.getFloat64
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
, 9: {
|
|
|
|
|
|
|
|
length: null
|
|
|
|
|
|
|
|
, unpack: Types.getUTFString
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
, 10: {
|
|
|
|
|
|
|
|
length: 4
|
|
|
|
|
|
|
|
, unpack: Types.getDate
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
, 11: {
|
|
|
|
|
|
|
|
length: 2
|
|
|
|
|
|
|
|
, unpack: Types.getVersion
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
, 12: {
|
|
|
|
|
|
|
|
length: null
|
|
|
|
|
|
|
|
, unpack: Types.getCollection
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
, Types = Toolbox.Base.extend({
|
|
|
|
, Types = Toolbox.Base.extend({
|
|
|
|
constructor: function (code) {
|
|
|
|
constructor: function (code) {
|
|
|
@ -73,8 +18,8 @@ define([
|
|
|
|
;
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
|
|
if (_.isNumber(code)) {
|
|
|
|
if (_.isNumber(code)) {
|
|
|
|
if (!_.isUndefined(typeMap[code])) {
|
|
|
|
if (!_.isUndefined(Types.typeMap[code])) {
|
|
|
|
_.extend(this, typeMap[code]);
|
|
|
|
_.extend(this, Types.typeMap[code]);
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -90,45 +35,135 @@ define([
|
|
|
|
, getCode: function() {
|
|
|
|
, getCode: function() {
|
|
|
|
return this.code;
|
|
|
|
return this.code;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
, getByteLength: function() {
|
|
|
|
, getByteLength: function() {
|
|
|
|
return this.length;
|
|
|
|
return this.length;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
, {
|
|
|
|
, {
|
|
|
|
getInt8: function (chunk) {
|
|
|
|
|
|
|
|
return new DataView(chunk.slice(0,typeMap[1].length)).getInt8(0, false);
|
|
|
|
|
|
|
|
|
|
|
|
typeMap: {
|
|
|
|
|
|
|
|
1: {
|
|
|
|
|
|
|
|
length: 1
|
|
|
|
|
|
|
|
, unpack: function (chunk) {
|
|
|
|
|
|
|
|
Types.getInt8(chunk);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
, 2: {
|
|
|
|
|
|
|
|
length: 1
|
|
|
|
|
|
|
|
, unpack: function (chunk) {
|
|
|
|
|
|
|
|
Types.getUint8(chunk);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
, 3: {
|
|
|
|
|
|
|
|
length: 2
|
|
|
|
|
|
|
|
, unpack: function (chunk) {
|
|
|
|
|
|
|
|
Types.getInt16(chunk);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
, 4: {
|
|
|
|
|
|
|
|
length: 2
|
|
|
|
|
|
|
|
, unpack: function (chunk) {
|
|
|
|
|
|
|
|
Types.getUint16(chunk);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
, 5: {
|
|
|
|
|
|
|
|
length: 4
|
|
|
|
|
|
|
|
, unpack: function (chunk) {
|
|
|
|
|
|
|
|
Types.getInt32(chunk);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
, 6: {
|
|
|
|
|
|
|
|
length: 4
|
|
|
|
|
|
|
|
, unpack: function (chunk) {
|
|
|
|
|
|
|
|
Types.getUint32(chunk);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
, 7: {
|
|
|
|
|
|
|
|
length: 8
|
|
|
|
|
|
|
|
, unpack: function (chunk) {
|
|
|
|
|
|
|
|
Types.getFloat64(chunk);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// There is no unsigned 64bit integer in JS.
|
|
|
|
|
|
|
|
, 8: {
|
|
|
|
|
|
|
|
length: 8
|
|
|
|
|
|
|
|
, unpack: function (chunk) {
|
|
|
|
|
|
|
|
Types.getFloat64(chunk);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
, 9: {
|
|
|
|
|
|
|
|
length: null
|
|
|
|
|
|
|
|
, unpack: function (chunk, length) {
|
|
|
|
|
|
|
|
Types.getUTFString(chunk, length);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
, 10: {
|
|
|
|
|
|
|
|
length: 4
|
|
|
|
|
|
|
|
, unpack: function (chunk) {
|
|
|
|
|
|
|
|
Types.getDate(chunk);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
, 11: {
|
|
|
|
|
|
|
|
length: 2
|
|
|
|
|
|
|
|
, unpack: function (chunk) {
|
|
|
|
|
|
|
|
Types.getVersion(chunk);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
, 12: {
|
|
|
|
|
|
|
|
length: null
|
|
|
|
|
|
|
|
, unpack: function (chunk, length) {
|
|
|
|
|
|
|
|
Types.getModel(chunk, length);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
, getInt8: function (chunk) {
|
|
|
|
|
|
|
|
return new DataView(chunk.slice(0,Types.typeMap[1].length)).getInt8(0, false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
, getUint8: function (chunk) {
|
|
|
|
, getUint8: function (chunk) {
|
|
|
|
return new DataView(chunk.slice(0,typeMap[2].length)).getUint8(0, false);
|
|
|
|
return new DataView(chunk.slice(0,Types.typeMap[2].length)).getUint8(0, false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
, getInt16: function (chunk) {
|
|
|
|
, getInt16: function (chunk) {
|
|
|
|
return new DataView(chunk.slice(0,typeMap[3].length)).getInt16(0, false);
|
|
|
|
return new DataView(chunk.slice(0,Types.typeMap[3].length)).getInt16(0, false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
, getUint16: function (chunk) {
|
|
|
|
, getUint16: function (chunk) {
|
|
|
|
return new DataView(chunk.slice(0,typeMap[4].length)).getUint16(0, false);
|
|
|
|
return new DataView(chunk.slice(0,Types.typeMap[4].length)).getUint16(0, false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
, getInt32: function (chunk) {
|
|
|
|
, getInt32: function (chunk) {
|
|
|
|
return new DataView(chunk.slice(0,typeMap[5].length)).getInt32(0, false);
|
|
|
|
return new DataView(chunk.slice(0,Types.typeMap[5].length)).getInt32(0, false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
, getUint32: function (chunk) {
|
|
|
|
, getUint32: function (chunk) {
|
|
|
|
return new DataView(chunk.slice(0,typeMap[6].length)).getUint32(0, false);
|
|
|
|
return new DataView(chunk.slice(0,Types.typeMap[6].length)).getUint32(0, false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
, getFloat64: function (chunk) {
|
|
|
|
, getFloat64: function (chunk) {
|
|
|
|
return new DataView(chunk.slice(0,typeMap[7].length)).getFloat64(0, false);
|
|
|
|
return new DataView(chunk.slice(0,Types.typeMap[7].length)).getFloat64(0, false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
, getString: function(chunk, length) {
|
|
|
|
, getString: function(chunk, length) {
|
|
|
|
if (!_.isNumber(length) || length > chunk.byteLength) {
|
|
|
|
if (!_.isNumber(length) || length > chunk.byteLength) {
|
|
|
|
var length = chunk.byteLength;
|
|
|
|
length = chunk.byteLength;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return String.fromCharCode.apply(null, new Uint8Array(chunk.slice(0, length)));
|
|
|
|
return String.fromCharCode.apply(null, new Uint8Array(chunk.slice(0, length)));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -136,19 +171,19 @@ define([
|
|
|
|
, getUTFString: function (chunk, length) {
|
|
|
|
, getUTFString: function (chunk, length) {
|
|
|
|
var str = '';
|
|
|
|
var str = '';
|
|
|
|
if (!_.isNumber(length) || length > chunk.byteLength) {
|
|
|
|
if (!_.isNumber(length) || length > chunk.byteLength) {
|
|
|
|
var length = chunk.byteLength;
|
|
|
|
length = chunk.byteLength;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (var i = 0; i < length; i++) {
|
|
|
|
for (var i = 0; i < length; i++) {
|
|
|
|
var slice = chunk.slice(i, i+1);
|
|
|
|
var slice = chunk.slice(i, i+1);
|
|
|
|
var num = new DataView(slice).getUint8(0, false);
|
|
|
|
var num = new DataView(slice).getUint8(0, false);
|
|
|
|
|
|
|
|
|
|
|
|
str += num <= 0x7F ?
|
|
|
|
str += num <= 0x7F ?
|
|
|
|
num === 0x25 ? "%25" :
|
|
|
|
num === 0x25 ? "%25" :
|
|
|
|
String.fromCharCode(num) :
|
|
|
|
String.fromCharCode(num) :
|
|
|
|
"%" + num.toString(16);
|
|
|
|
"%" + num.toString(16);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return decodeURIComponent(str);
|
|
|
|
return decodeURIComponent(str);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -159,14 +194,16 @@ define([
|
|
|
|
, getVersion: function (chunk) {
|
|
|
|
, getVersion: function (chunk) {
|
|
|
|
return Types.getInt8(chunk.slice(0,1)) + "." + Types.getInt8(chunk.slice(1,2));
|
|
|
|
return Types.getInt8(chunk.slice(0,1)) + "." + Types.getInt8(chunk.slice(1,2));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
, getModel: function (chunk) {
|
|
|
|
, getModel: function (chunk) {
|
|
|
|
return chunk;
|
|
|
|
return chunk;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
, getUnknown: function (chunk) {
|
|
|
|
, getUnknown: function (chunk) {
|
|
|
|
// Unimplemented
|
|
|
|
// Unimplemented
|
|
|
|
/*switch (chunk.byteLength) {
|
|
|
|
throw "ERROR_UNIMPLEMENTED";
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
|
|
switch (chunk.byteLength) {
|
|
|
|
// We can tring a string
|
|
|
|
// We can tring a string
|
|
|
|
default:
|
|
|
|
default:
|
|
|
|
|
|
|
|
|
|
|
|