mirror of
https://github.com/unmojang/node-minecraft-protocol.git
synced 2025-10-01 07:00:34 -04:00
Merge pull request #215 from roblabla/feature-countType
Add countType support
This commit is contained in:
commit
c365478955
@ -21,11 +21,17 @@ function readArray(buffer, offset, typeArgs, rootNode) {
|
|||||||
size: 0
|
size: 0
|
||||||
};
|
};
|
||||||
var count;
|
var count;
|
||||||
if(typeof typeArgs.count === "object") {
|
if(typeof typeArgs.count === "object")
|
||||||
count = evalCount(typeArgs.count, rootNode);
|
count = evalCount(typeArgs.count, rootNode);
|
||||||
}
|
else if (typeof typeArgs.count !== "undefined")
|
||||||
else
|
|
||||||
count = getField(typeArgs.count, rootNode);
|
count = getField(typeArgs.count, rootNode);
|
||||||
|
else if (typeof typeArgs.countType !== "undefined") {
|
||||||
|
var countResults = this.read(buffer, offset, { type: typeArgs.countType, typeArgs: typeArgs.countTypeArgs }, rootNode);
|
||||||
|
results.size += countResults.size;
|
||||||
|
offset += countResults.size;
|
||||||
|
count = countResults.value;
|
||||||
|
} else // TODO : broken schema, should probably error out.
|
||||||
|
count = 0;
|
||||||
for(var i = 0; i < count; i++) {
|
for(var i = 0; i < count; i++) {
|
||||||
var readResults = this.read(buffer, offset, {type: typeArgs.type, typeArgs: typeArgs.typeArgs}, rootNode);
|
var readResults = this.read(buffer, offset, {type: typeArgs.type, typeArgs: typeArgs.typeArgs}, rootNode);
|
||||||
results.size += readResults.size;
|
results.size += readResults.size;
|
||||||
@ -36,6 +42,11 @@ function readArray(buffer, offset, typeArgs, rootNode) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function writeArray(value, buffer, offset, typeArgs, rootNode) {
|
function writeArray(value, buffer, offset, typeArgs, rootNode) {
|
||||||
|
if (typeof typeArgs.count === "undefined" &&
|
||||||
|
typeof typeArgs.countType !== "undefined") {
|
||||||
|
offset = this.write(value.length, buffer, offset, { type: typeArgs.countType, typeArgs: typeArgs.countTypeArgs }, rootNode);
|
||||||
|
} else if (typeof typeArgs.count === "undefined") { // Broken schema, should probably error out
|
||||||
|
}
|
||||||
for(var index in value) {
|
for(var index in value) {
|
||||||
offset = this.write(value[index], buffer, offset, {type: typeArgs.type, typeArgs: typeArgs.typeArgs}, rootNode);
|
offset = this.write(value[index], buffer, offset, {type: typeArgs.type, typeArgs: typeArgs.typeArgs}, rootNode);
|
||||||
}
|
}
|
||||||
@ -44,6 +55,10 @@ function writeArray(value, buffer, offset, typeArgs, rootNode) {
|
|||||||
|
|
||||||
function sizeOfArray(value, typeArgs, rootNode) {
|
function sizeOfArray(value, typeArgs, rootNode) {
|
||||||
var size = 0;
|
var size = 0;
|
||||||
|
if (typeof typeArgs.count === "undefined" &&
|
||||||
|
typeof typeArgs.countType !== "undefined") {
|
||||||
|
size = this.sizeOf(value.length, { type: typeArgs.countType, typeArgs: typeArgs.countTypeArgs }, rootNode);
|
||||||
|
}
|
||||||
for(var index in value) {
|
for(var index in value) {
|
||||||
size += this.sizeOf(value[index], {type: typeArgs.type, typeArgs: typeArgs.typeArgs}, rootNode);
|
size += this.sizeOf(value[index], {type: typeArgs.type, typeArgs: typeArgs.typeArgs}, rootNode);
|
||||||
}
|
}
|
||||||
|
@ -97,18 +97,37 @@ function writeBool(value, buffer, offset) {
|
|||||||
|
|
||||||
|
|
||||||
function readBuffer(buffer, offset, typeArgs, rootNode) {
|
function readBuffer(buffer, offset, typeArgs, rootNode) {
|
||||||
var count = getField(typeArgs.count, rootNode);
|
var size = 0;
|
||||||
|
var count;
|
||||||
|
if (typeof typeArgs.count !== "undefined")
|
||||||
|
count = getField(typeArgs.count, rootNode);
|
||||||
|
else if (typeof typeArgs.countType !== "undefined") {
|
||||||
|
var countResults = this.read(buffer, offset, { type: typeArgs.countType, typeArgs: typeArgs.countTypeArgs }, rootNode);
|
||||||
|
size += countResults.size;
|
||||||
|
offset += countResults.size;
|
||||||
|
count = countResults.value;
|
||||||
|
}
|
||||||
return {
|
return {
|
||||||
value: buffer.slice(offset, offset + count),
|
value: buffer.slice(offset, offset + count),
|
||||||
size: count
|
size: size + count
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function writeBuffer(value, buffer, offset) {
|
function writeBuffer(value, buffer, offset, typeArgs, rootNode) {
|
||||||
|
if (typeof typeArgs.count === "undefined" &&
|
||||||
|
typeof typeArgs.countType !== "undefined") {
|
||||||
|
offset = this.write(value.length, buffer, offset, { type: typeArgs.countType, typeArgs: typeArgs.countTypeArgs }, rootNode);
|
||||||
|
} else if (typeof typeArgs.count === "undefined") { // Broken schema, should probably error out
|
||||||
|
}
|
||||||
value.copy(buffer, offset);
|
value.copy(buffer, offset);
|
||||||
return offset + value.length;
|
return offset + value.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
function sizeOfBuffer(value) {
|
function sizeOfBuffer(value, typeArgs, rootNode) {
|
||||||
return value.length;
|
var size = 0;
|
||||||
|
if (typeof typeArgs.count === "undefined" &&
|
||||||
|
typeof typeArgs.countType !== "undefined") {
|
||||||
|
size = this.sizeOf(value.length, { type: typeArgs.countType, typeArgs: typeArgs.countTypeArgs }, rootNode);
|
||||||
|
}
|
||||||
|
return size + value.length;
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,8 @@ NMProtocols.prototype.read = function(buffer, cursor, fieldInfo, rootNodes) {
|
|||||||
error: new Error("missing data type: " + fieldInfo.type)
|
error: new Error("missing data type: " + fieldInfo.type)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
var readResults = type[0].call(this, buffer, cursor, fieldInfo.typeArgs, rootNodes);
|
var typeArgs = fieldInfo.typeArgs || {};
|
||||||
|
var readResults = type[0].call(this, buffer, cursor, typeArgs, rootNodes);
|
||||||
if(readResults == null) {
|
if(readResults == null) {
|
||||||
throw new Error("Reader returned null : " + JSON.stringify(fieldInfo));
|
throw new Error("Reader returned null : " + JSON.stringify(fieldInfo));
|
||||||
}
|
}
|
||||||
@ -35,7 +36,8 @@ NMProtocols.prototype.write = function(value, buffer, offset, fieldInfo, rootNod
|
|||||||
error: new Error("missing data type: " + fieldInfo.type)
|
error: new Error("missing data type: " + fieldInfo.type)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
return type[1].call(this, value, buffer, offset, fieldInfo.typeArgs, rootNode);
|
var typeArgs = fieldInfo.typeArgs || {};
|
||||||
|
return type[1].call(this, value, buffer, offset, typeArgs, rootNode);
|
||||||
};
|
};
|
||||||
|
|
||||||
NMProtocols.prototype.sizeOf = function(value, fieldInfo, rootNode) {
|
NMProtocols.prototype.sizeOf = function(value, fieldInfo, rootNode) {
|
||||||
@ -44,7 +46,8 @@ NMProtocols.prototype.sizeOf = function(value, fieldInfo, rootNode) {
|
|||||||
throw new Error("missing data type: " + fieldInfo.type);
|
throw new Error("missing data type: " + fieldInfo.type);
|
||||||
}
|
}
|
||||||
if(typeof type[2] === 'function') {
|
if(typeof type[2] === 'function') {
|
||||||
return type[2].call(this, value, fieldInfo.typeArgs, rootNode);
|
var typeArgs = fieldInfo.typeArgs || {};
|
||||||
|
return type[2].call(this, value, typeArgs, rootNode);
|
||||||
} else {
|
} else {
|
||||||
return type[2];
|
return type[2];
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user