parent
8c849ed49f
commit
9c300cd191
|
@ -16,217 +16,206 @@ function Write(buf, data, StringFormat?, ParamValue?, WorkStruct?) {
|
||||||
global.ToLogTrace("ERRR StringFormat ");
|
global.ToLogTrace("ERRR StringFormat ");
|
||||||
throw "ERR!!";
|
throw "ERR!!";
|
||||||
}
|
}
|
||||||
else {
|
var format = StringFormat;
|
||||||
var format = StringFormat;
|
if (format.substr(0, 6) === "buffer" && format.length > 6) {
|
||||||
if (format.substr(0, 6) === "buffer" && format.length > 6) {
|
ParamValue = parseInt(format.substr(6));
|
||||||
ParamValue = parseInt(format.substr(6));
|
format = "buffer";
|
||||||
format = "buffer";
|
} else if (format.substr(0, 3) === "arr" && format.length > 3) {
|
||||||
}
|
ParamValue = parseInt(format.substr(3));
|
||||||
else
|
format = "arr";
|
||||||
if (format.substr(0, 3) === "arr" && format.length > 3) {
|
} else if (format.substr(0, 3) === "str" && format.length > 3) {
|
||||||
ParamValue = parseInt(format.substr(3));
|
var length = parseInt(format.substr(3));
|
||||||
format = "arr";
|
if (data)
|
||||||
|
buf.write(data, buf.len, length);
|
||||||
|
buf.len += length;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
switch (format) {
|
||||||
|
case "str":
|
||||||
|
{
|
||||||
|
var arr = global.toUTF8Array(data);
|
||||||
|
let length = arr.length;
|
||||||
|
if (length > 65535)
|
||||||
|
length = 0;
|
||||||
|
buf[buf.len] = length & 255;
|
||||||
|
buf[buf.len + 1] = (length >>> 8) & 255;
|
||||||
|
buf.len += 2;
|
||||||
|
for (var i = 0; i < length; i++) {
|
||||||
|
buf[buf.len + i] = arr[i];
|
||||||
|
}
|
||||||
|
buf.len += length;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else
|
case "byte":
|
||||||
if (format.substr(0, 3) === "str" && format.length > 3) {
|
{
|
||||||
var length = parseInt(format.substr(3));
|
if (data < 0)
|
||||||
if (data)
|
data = 0;
|
||||||
buf.write(data, buf.len, length);
|
buf[buf.len] = data;
|
||||||
buf.len += length;
|
buf.len += 1;
|
||||||
return;
|
break;
|
||||||
|
}
|
||||||
|
case "double":
|
||||||
|
{
|
||||||
|
buf.writeDoubleLE(data, buf.len, 8);
|
||||||
|
buf.len += 8;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "uint":
|
||||||
|
{
|
||||||
|
if (data < 0)
|
||||||
|
data = 0;
|
||||||
|
if (data >= 281474976710655)
|
||||||
|
data = 0;
|
||||||
|
buf.writeUIntLE(data, buf.len, 6);
|
||||||
|
buf.len += 6;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "uint16":
|
||||||
|
{
|
||||||
|
if (data < 0)
|
||||||
|
data = 0;
|
||||||
|
buf[buf.len] = data & 255;
|
||||||
|
buf[buf.len + 1] = (data >>> 8) & 255;
|
||||||
|
buf.len += 2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "uint32":
|
||||||
|
{
|
||||||
|
if (data < 0)
|
||||||
|
data = 0;
|
||||||
|
buf.writeUInt32LE(data, buf.len, 4);
|
||||||
|
buf.len += 4;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "time":
|
||||||
|
{
|
||||||
|
var Time = data.valueOf();
|
||||||
|
buf.writeUIntLE(Time, buf.len, 6);
|
||||||
|
buf.len += 6;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "addres":
|
||||||
|
case "hash":
|
||||||
|
{
|
||||||
|
let length;
|
||||||
|
if (data)
|
||||||
|
length = Math.min(32, data.length);
|
||||||
|
else
|
||||||
|
length = 0;
|
||||||
|
for (var i = 0; i < length; i++) {
|
||||||
|
buf[buf.len + i] = data[i];
|
||||||
}
|
}
|
||||||
switch (format) {
|
buf.len += 32;
|
||||||
case "str":
|
break;
|
||||||
{
|
}
|
||||||
var arr = global.toUTF8Array(data);
|
case "buffer":
|
||||||
let length = arr.length;
|
{
|
||||||
if (length > 65535)
|
let length;
|
||||||
length = 0;
|
if (ParamValue === undefined)
|
||||||
buf[buf.len] = length & 255;
|
length = data.length;
|
||||||
buf[buf.len + 1] = (length >>> 8) & 255;
|
else
|
||||||
buf.len += 2;
|
length = Math.min(ParamValue, data.length);
|
||||||
for (var i = 0; i < length; i++) {
|
for (var i = 0; i < length; i++) {
|
||||||
buf[buf.len + i] = arr[i];
|
buf[buf.len + i] = data[i];
|
||||||
}
|
|
||||||
buf.len += length;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
case "byte":
|
buf.len += ParamValue;
|
||||||
{
|
break;
|
||||||
if (data < 0)
|
}
|
||||||
data = 0;
|
case "arr":
|
||||||
buf[buf.len] = data;
|
{
|
||||||
buf.len += 1;
|
let length;
|
||||||
break;
|
if (data)
|
||||||
|
length = Math.min(ParamValue, data.length);
|
||||||
|
else
|
||||||
|
length = 0;
|
||||||
|
for (var i = 0; i < length; i++) {
|
||||||
|
buf[buf.len + i] = data[i];
|
||||||
}
|
}
|
||||||
case "double":
|
buf.len += ParamValue;
|
||||||
{
|
break;
|
||||||
buf.writeDoubleLE(data, buf.len, 8);
|
}
|
||||||
buf.len += 8;
|
case "tr":
|
||||||
break;
|
{
|
||||||
|
let length = data.length;
|
||||||
|
if (global.MAX_TRANSACTION_SIZE > global.MAX_TRANSACTION_SIZE)
|
||||||
|
length = global.MAX_TRANSACTION_SIZE;
|
||||||
|
buf[buf.len] = length & 255;
|
||||||
|
buf[buf.len + 1] = (length >>> 8) & 255;
|
||||||
|
buf.len += 2;
|
||||||
|
for (var i = 0; i < length; i++) {
|
||||||
|
buf[buf.len + i] = data[i];
|
||||||
}
|
}
|
||||||
case "uint":
|
buf.len += length;
|
||||||
{
|
break;
|
||||||
if (data < 0)
|
}
|
||||||
data = 0;
|
case "data":
|
||||||
if (data >= 281474976710655)
|
{
|
||||||
data = 0;
|
let length = data.length;
|
||||||
buf.writeUIntLE(data, buf.len, 6);
|
buf.writeUInt32LE(length, buf.len, 4);
|
||||||
buf.len += 6;
|
buf.len += 4;
|
||||||
break;
|
for (var i = 0; i < length; i++) {
|
||||||
|
buf[buf.len + i] = data[i];
|
||||||
}
|
}
|
||||||
case "uint16":
|
buf.len += length;
|
||||||
{
|
break;
|
||||||
if (data < 0)
|
}
|
||||||
data = 0;
|
case "hashSTR":
|
||||||
buf[buf.len] = data & 255;
|
{
|
||||||
buf[buf.len + 1] = (data >>> 8) & 255;
|
var Str = global.GetHexFromAddres(data);
|
||||||
buf.len += 2;
|
buf.write(Str, buf.len, 64);
|
||||||
break;
|
buf.len += 64;
|
||||||
}
|
break;
|
||||||
case "uint32":
|
}
|
||||||
{
|
case "uintSTR":
|
||||||
if (data < 0)
|
{
|
||||||
data = 0;
|
var Str = data.toString();
|
||||||
buf.writeUInt32LE(data, buf.len, 4);
|
buf.write(Str, buf.len, 10);
|
||||||
buf.len += 4;
|
buf.len += 10;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "time":
|
default:
|
||||||
{
|
{
|
||||||
var Time = data.valueOf();
|
WorkStruct = WorkStruct || {};
|
||||||
buf.writeUIntLE(Time, buf.len, 6);
|
var CurFormat = StringFormat.substr(0, 1);
|
||||||
buf.len += 6;
|
if (CurFormat === "[") {
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "addres":
|
|
||||||
case "hash":
|
|
||||||
{
|
|
||||||
let length;
|
let length;
|
||||||
if (data)
|
if (data)
|
||||||
length = Math.min(32, data.length);
|
|
||||||
else
|
|
||||||
length = 0;
|
|
||||||
for (var i = 0; i < length; i++) {
|
|
||||||
buf[buf.len + i] = data[i];
|
|
||||||
}
|
|
||||||
buf.len += 32;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "buffer":
|
|
||||||
{
|
|
||||||
let length;
|
|
||||||
if (ParamValue === undefined)
|
|
||||||
length = data.length;
|
length = data.length;
|
||||||
else
|
var formatNext = GetMiddleString(format);
|
||||||
length = Math.min(ParamValue, data.length);
|
Write(buf, length, "uint32");
|
||||||
for (var i = 0; i < length; i++) {
|
for (var i = 0; i < length; i++) {
|
||||||
buf[buf.len + i] = data[i];
|
Write(buf, data[i], formatNext, undefined, WorkStruct);
|
||||||
}
|
}
|
||||||
buf.len += ParamValue;
|
} else if (CurFormat === "<") {
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "arr":
|
|
||||||
{
|
|
||||||
let length;
|
let length;
|
||||||
if (data)
|
if (data)
|
||||||
length = Math.min(ParamValue, data.length);
|
length = data.length;
|
||||||
else
|
var formatNext = GetMiddleString(format);
|
||||||
length = 0;
|
var IndexCount = 0;
|
||||||
for (var i = 0; i < length; i++) {
|
var len = buf.len;
|
||||||
buf[buf.len + i] = data[i];
|
|
||||||
}
|
|
||||||
buf.len += ParamValue;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "tr":
|
|
||||||
{
|
|
||||||
let length = data.length;
|
|
||||||
if (global.MAX_TRANSACTION_SIZE > global.MAX_TRANSACTION_SIZE)
|
|
||||||
length = global.MAX_TRANSACTION_SIZE;
|
|
||||||
buf[buf.len] = length & 255;
|
|
||||||
buf[buf.len + 1] = (length >>> 8) & 255;
|
|
||||||
buf.len += 2;
|
|
||||||
for (var i = 0; i < length; i++) {
|
|
||||||
buf[buf.len + i] = data[i];
|
|
||||||
}
|
|
||||||
buf.len += length;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "data":
|
|
||||||
{
|
|
||||||
let length = data.length;
|
|
||||||
buf.writeUInt32LE(length, buf.len, 4);
|
|
||||||
buf.len += 4;
|
buf.len += 4;
|
||||||
for (var i = 0; i < length; i++) {
|
for (var i = 0; i < length; i++) {
|
||||||
buf[buf.len + i] = data[i];
|
if (data[i]) {
|
||||||
}
|
IndexCount++;
|
||||||
buf.len += length;
|
Write(buf, i, "uint32");
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "hashSTR":
|
|
||||||
{
|
|
||||||
var Str = global.GetHexFromAddres(data);
|
|
||||||
buf.write(Str, buf.len, 64);
|
|
||||||
buf.len += 64;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "uintSTR":
|
|
||||||
{
|
|
||||||
var Str = data.toString();
|
|
||||||
buf.write(Str, buf.len, 10);
|
|
||||||
buf.len += 10;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
WorkStruct = WorkStruct || {};
|
|
||||||
var CurFormat = StringFormat.substr(0, 1);
|
|
||||||
if (CurFormat === "[") {
|
|
||||||
let length;
|
|
||||||
if (data)
|
|
||||||
length = data.length;
|
|
||||||
var formatNext = GetMiddleString(format);
|
|
||||||
Write(buf, length, "uint32");
|
|
||||||
for (var i = 0; i < length; i++) {
|
|
||||||
Write(buf, data[i], formatNext, undefined, WorkStruct);
|
Write(buf, data[i], formatNext, undefined, WorkStruct);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
buf.writeUInt32LE(IndexCount, len, 4);
|
||||||
if (CurFormat === "<") {
|
} else if (CurFormat === "{") {
|
||||||
let length;
|
var attrs = WorkStruct[format];
|
||||||
if (data)
|
if (!attrs) {
|
||||||
length = data.length;
|
attrs = GetAttributes(GetMiddleString(format));
|
||||||
var formatNext = GetMiddleString(format);
|
WorkStruct[format] = attrs;
|
||||||
var IndexCount = 0;
|
}
|
||||||
var len = buf.len;
|
for (var i = 0; i < attrs.length; i++) {
|
||||||
buf.len += 4;
|
var type = attrs[i];
|
||||||
for (var i = 0; i < length; i++) {
|
Write(buf, data[type.Key], type.Value, undefined, WorkStruct);
|
||||||
if (data[i]) {
|
}
|
||||||
IndexCount++;
|
} else {
|
||||||
Write(buf, i, "uint32");
|
throw "Bad write type params: " + format;
|
||||||
Write(buf, data[i], formatNext, undefined, WorkStruct);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
buf.writeUInt32LE(IndexCount, len, 4);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
if (CurFormat === "{") {
|
|
||||||
var attrs = WorkStruct[format];
|
|
||||||
if (!attrs) {
|
|
||||||
attrs = GetAttributes(GetMiddleString(format));
|
|
||||||
WorkStruct[format] = attrs;
|
|
||||||
}
|
|
||||||
for (var i = 0; i < attrs.length; i++) {
|
|
||||||
var type = attrs[i];
|
|
||||||
Write(buf, data[type.Key], type.Value, undefined, WorkStruct);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
throw "Bad write type params: " + format;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -236,225 +225,205 @@ function Read(buf, StringFormat, ParamValue?, WorkStruct?, bDisableTime?) {
|
||||||
global.ToLogTrace("ERR StringFormat");
|
global.ToLogTrace("ERR StringFormat");
|
||||||
throw "ERRR!";
|
throw "ERRR!";
|
||||||
}
|
}
|
||||||
else {
|
var format = StringFormat;
|
||||||
var format = StringFormat;
|
if (format.substr(0, 6) === "buffer") {
|
||||||
if (format.substr(0, 6) === "buffer") {
|
if (format.length > 6) {
|
||||||
if (format.length > 6) {
|
ParamValue = parseInt(format.substr(6));
|
||||||
ParamValue = parseInt(format.substr(6));
|
format = "buffer";
|
||||||
format = "buffer";
|
} else {
|
||||||
}
|
ParamValue = 0;
|
||||||
else {
|
|
||||||
ParamValue = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
} else if (format.substr(0, 3) === "arr") {
|
||||||
if (format.substr(0, 3) === "arr") {
|
if (format.length > 3) {
|
||||||
if (format.length > 3) {
|
ParamValue = parseInt(format.substr(3));
|
||||||
ParamValue = parseInt(format.substr(3));
|
format = "arr";
|
||||||
format = "arr";
|
} else {
|
||||||
}
|
ParamValue = 0;
|
||||||
else {
|
}
|
||||||
ParamValue = 0;
|
} else if (format.substr(0, 3) === "str") {
|
||||||
|
if (format.length > 3) {
|
||||||
|
var length = parseInt(format.substr(3));
|
||||||
|
ret = buf.toString('utf8', buf.len, buf.len + length);
|
||||||
|
buf.len += length;
|
||||||
|
var nEnd = - 1;
|
||||||
|
for (var i = ret.length - 1; i >= 0; i--) {
|
||||||
|
if (ret.charCodeAt(i) !== 0) {
|
||||||
|
nEnd = i;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
return nEnd >= 0 ? ret.substr(0, i + 1) : "";
|
||||||
if (format.substr(0, 3) === "str") {
|
} else {
|
||||||
if (format.length > 3) {
|
ParamValue = 0;
|
||||||
var length = parseInt(format.substr(3));
|
}
|
||||||
ret = buf.toString('utf8', buf.len, buf.len + length);
|
}
|
||||||
buf.len += length;
|
switch (format) {
|
||||||
var nEnd = - 1;
|
case "str":
|
||||||
for (var i = ret.length - 1; i >= 0; i--) {
|
{
|
||||||
if (ret.charCodeAt(i) !== 0) {
|
let length;
|
||||||
nEnd = i;
|
if (buf.len + 2 <= buf.length)
|
||||||
break;
|
length = buf[buf.len] + buf[buf.len + 1] * 256;
|
||||||
}
|
else
|
||||||
}
|
length = 0;
|
||||||
if (nEnd >= 0)
|
buf.len += 2;
|
||||||
ret = ret.substr(0, i + 1);
|
var arr = buf.slice(buf.len, buf.len + length);
|
||||||
else
|
ret = global.Utf8ArrayToStr(arr);
|
||||||
ret = "";
|
buf.len += length;
|
||||||
return ret;
|
break;
|
||||||
}
|
}
|
||||||
else {
|
case "byte":
|
||||||
ParamValue = 0;
|
{
|
||||||
}
|
if (buf.len + 1 <= buf.length)
|
||||||
}
|
ret = buf[buf.len];
|
||||||
switch (format) {
|
else
|
||||||
case "str":
|
ret = 0;
|
||||||
{
|
buf.len += 1;
|
||||||
let length;
|
break;
|
||||||
if (buf.len + 2 <= buf.length)
|
}
|
||||||
length = buf[buf.len] + buf[buf.len + 1] * 256;
|
case "double":
|
||||||
|
{
|
||||||
|
if (buf.len + 8 <= buf.length)
|
||||||
|
ret = buf.readDoubleLE(buf.len, 8);
|
||||||
|
else
|
||||||
|
ret = 0;
|
||||||
|
buf.len += 8;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "uint":
|
||||||
|
{
|
||||||
|
if (buf.len + 6 <= buf.length)
|
||||||
|
ret = buf.readUIntLE(buf.len, 6);
|
||||||
|
else
|
||||||
|
ret = 0;
|
||||||
|
buf.len += 6;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "uint16":
|
||||||
|
{
|
||||||
|
if (buf.len + 2 <= buf.length)
|
||||||
|
ret = buf[buf.len] + buf[buf.len + 1] * 256;
|
||||||
|
else
|
||||||
|
ret = 0;
|
||||||
|
buf.len += 2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "uint32":
|
||||||
|
{
|
||||||
|
if (buf.len + 4 <= buf.length)
|
||||||
|
ret = buf.readUInt32LE(buf.len, 4);
|
||||||
|
else
|
||||||
|
ret = 0;
|
||||||
|
buf.len += 4;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "time":
|
||||||
|
{
|
||||||
|
if (bDisableTime)
|
||||||
|
throw "Bad read type params: time - DisableTime ON";
|
||||||
|
if (buf.len + 6 <= buf.length)
|
||||||
|
ret = buf.readUIntLE(buf.len, 6);
|
||||||
|
else
|
||||||
|
ret = 0;
|
||||||
|
ret = new Date(ret);
|
||||||
|
buf.len += 6;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "addres":
|
||||||
|
case "hash":
|
||||||
|
{
|
||||||
|
ret = [];
|
||||||
|
for (var i = 0; i < 32; i++) {
|
||||||
|
if (buf.len + i <= buf.length)
|
||||||
|
ret[i] = buf[buf.len + i];
|
||||||
else
|
else
|
||||||
length = 0;
|
ret[i] = 0;
|
||||||
buf.len += 2;
|
}
|
||||||
var arr = buf.slice(buf.len, buf.len + length);
|
buf.len += 32;
|
||||||
ret = global.Utf8ArrayToStr(arr);
|
break;
|
||||||
buf.len += length;
|
}
|
||||||
|
case "buffer":
|
||||||
|
case "arr":
|
||||||
|
{
|
||||||
|
if (buf.len + ParamValue <= buf.length)
|
||||||
|
ret = buf.slice(buf.len, buf.len + ParamValue);
|
||||||
|
else
|
||||||
|
ret = Buffer.alloc(ParamValue);
|
||||||
|
buf.len += ParamValue;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "tr":
|
||||||
|
{
|
||||||
|
if (buf.len + 1 >= buf.length) {
|
||||||
|
ret = undefined;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "byte":
|
let length = buf[buf.len] + buf[buf.len + 1] * 256;
|
||||||
{
|
buf.len += 2;
|
||||||
if (buf.len + 1 <= buf.length)
|
ret = buf.slice(buf.len, buf.len + length);
|
||||||
ret = buf[buf.len];
|
buf.len += length;
|
||||||
else
|
break;
|
||||||
ret = 0;
|
}
|
||||||
buf.len += 1;
|
case "data":
|
||||||
break;
|
{
|
||||||
}
|
let length;
|
||||||
case "double":
|
if (buf.len + 4 <= buf.length)
|
||||||
{
|
length = buf.readUInt32LE(buf.len, 4);
|
||||||
if (buf.len + 8 <= buf.length)
|
else
|
||||||
ret = buf.readDoubleLE(buf.len, 8);
|
length = 0;
|
||||||
else
|
if (length > buf.length - buf.len - 4)
|
||||||
ret = 0;
|
length = 0;
|
||||||
buf.len += 8;
|
buf.len += 4;
|
||||||
break;
|
ret = buf.slice(buf.len, buf.len + length);
|
||||||
}
|
buf.len += length;
|
||||||
case "uint":
|
break;
|
||||||
{
|
}
|
||||||
if (buf.len + 6 <= buf.length)
|
case "hashSTR":
|
||||||
ret = buf.readUIntLE(buf.len, 6);
|
{
|
||||||
else
|
var Str = buf.toString('utf8', buf.len, buf.len + 64);
|
||||||
ret = 0;
|
ret = global.GetAddresFromHex(Str);
|
||||||
buf.len += 6;
|
buf.len += 64;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "uint16":
|
case "uintSTR":
|
||||||
{
|
{
|
||||||
if (buf.len + 2 <= buf.length)
|
var Str = buf.toString('utf8', buf.len, buf.len + 10);
|
||||||
ret = buf[buf.len] + buf[buf.len + 1] * 256;
|
ret = parseInt(Str);
|
||||||
else
|
buf.len += 10;
|
||||||
ret = 0;
|
break;
|
||||||
buf.len += 2;
|
}
|
||||||
break;
|
default:
|
||||||
}
|
{
|
||||||
case "uint32":
|
WorkStruct = WorkStruct || {};
|
||||||
{
|
var LStr = format.substr(0, 1);
|
||||||
if (buf.len + 4 <= buf.length)
|
if (LStr === "[" || LStr === "<") {
|
||||||
ret = buf.readUInt32LE(buf.len, 4);
|
var bIndexArr = (LStr === "<");
|
||||||
else
|
|
||||||
ret = 0;
|
|
||||||
buf.len += 4;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "time":
|
|
||||||
{
|
|
||||||
if (bDisableTime)
|
|
||||||
throw "Bad read type params: time - DisableTime ON";
|
|
||||||
if (buf.len + 6 <= buf.length)
|
|
||||||
ret = buf.readUIntLE(buf.len, 6);
|
|
||||||
else
|
|
||||||
ret = 0;
|
|
||||||
ret = new Date(ret);
|
|
||||||
buf.len += 6;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "addres":
|
|
||||||
case "hash":
|
|
||||||
{
|
|
||||||
ret = [];
|
ret = [];
|
||||||
for (var i = 0; i < 32; i++) {
|
var formatNext = GetMiddleString(format);
|
||||||
if (buf.len + i <= buf.length)
|
let length = Read(buf, "uint32");
|
||||||
ret[i] = buf[buf.len + i];
|
for (var i = 0; i < length; i++) {
|
||||||
else
|
if (buf.len > buf.length) { break; }
|
||||||
ret[i] = 0;
|
if (bIndexArr) {
|
||||||
}
|
var index = Read(buf, "uint32");
|
||||||
buf.len += 32;
|
ret[index] = Read(buf, formatNext, undefined, WorkStruct, bDisableTime);
|
||||||
break;
|
} else {
|
||||||
}
|
ret[i] = Read(buf, formatNext, undefined, WorkStruct, bDisableTime);
|
||||||
case "buffer":
|
|
||||||
case "arr":
|
|
||||||
{
|
|
||||||
if (buf.len + ParamValue <= buf.length)
|
|
||||||
ret = buf.slice(buf.len, buf.len + ParamValue);
|
|
||||||
else
|
|
||||||
ret = Buffer.alloc(ParamValue);
|
|
||||||
buf.len += ParamValue;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "tr":
|
|
||||||
{
|
|
||||||
if (buf.len + 1 >= buf.length) {
|
|
||||||
ret = undefined;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
let length = buf[buf.len] + buf[buf.len + 1] * 256;
|
|
||||||
buf.len += 2;
|
|
||||||
ret = buf.slice(buf.len, buf.len + length);
|
|
||||||
buf.len += length;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "data":
|
|
||||||
{
|
|
||||||
let length;
|
|
||||||
if (buf.len + 4 <= buf.length)
|
|
||||||
length = buf.readUInt32LE(buf.len, 4);
|
|
||||||
else
|
|
||||||
length = 0;
|
|
||||||
if (length > buf.length - buf.len - 4)
|
|
||||||
length = 0;
|
|
||||||
buf.len += 4;
|
|
||||||
ret = buf.slice(buf.len, buf.len + length);
|
|
||||||
buf.len += length;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "hashSTR":
|
|
||||||
{
|
|
||||||
var Str = buf.toString('utf8', buf.len, buf.len + 64);
|
|
||||||
ret = global.GetAddresFromHex(Str);
|
|
||||||
buf.len += 64;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "uintSTR":
|
|
||||||
{
|
|
||||||
var Str = buf.toString('utf8', buf.len, buf.len + 10);
|
|
||||||
ret = parseInt(Str);
|
|
||||||
buf.len += 10;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
WorkStruct = WorkStruct || {};
|
|
||||||
var LStr = format.substr(0, 1);
|
|
||||||
if (LStr === "[" || LStr === "<") {
|
|
||||||
var bIndexArr = (LStr === "<");
|
|
||||||
ret = [];
|
|
||||||
var formatNext = GetMiddleString(format);
|
|
||||||
let length = Read(buf, "uint32");
|
|
||||||
for (var i = 0; i < length; i++) {
|
|
||||||
if (buf.len <= buf.length) {
|
|
||||||
if (bIndexArr) {
|
|
||||||
var index = Read(buf, "uint32");
|
|
||||||
ret[index] = Read(buf, formatNext, undefined, WorkStruct, bDisableTime);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ret[i] = Read(buf, formatNext, undefined, WorkStruct, bDisableTime);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
} else if (LStr === "{") {
|
||||||
if (LStr === "{") {
|
var attrs = WorkStruct[format];
|
||||||
var attrs = WorkStruct[format];
|
if (!attrs) {
|
||||||
if (!attrs) {
|
attrs = GetAttributes(GetMiddleString(format));
|
||||||
attrs = GetAttributes(GetMiddleString(format));
|
WorkStruct[format] = attrs;
|
||||||
WorkStruct[format] = attrs;
|
}
|
||||||
}
|
ret = {};
|
||||||
ret = {};
|
for (var i = 0; i < attrs.length; i++) {
|
||||||
for (var i = 0; i < attrs.length; i++) {
|
var type = attrs[i];
|
||||||
var type = attrs[i];
|
ret[type.Key] = Read(buf, type.Value, undefined, WorkStruct, bDisableTime);
|
||||||
ret[type.Key] = Read(buf, type.Value, undefined, WorkStruct, bDisableTime);
|
}
|
||||||
}
|
} else {
|
||||||
}
|
throw "Bad read type params: " + format;
|
||||||
else {
|
|
||||||
throw "Bad read type params: " + format;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue