mirror of
https://github.com/unmojang/node-minecraft-protocol.git
synced 2025-09-28 13:45:37 -04:00
Implement new context syntax
This commit is contained in:
parent
54337cc068
commit
f9484d9444
@ -97,17 +97,14 @@ function sizeOfArray(value, typeArgs, rootNode) {
|
||||
}
|
||||
|
||||
|
||||
function readContainer(buffer, offset, typeArgs, rootNode) {
|
||||
function readContainer(buffer, offset, typeArgs, context) {
|
||||
var results = {
|
||||
value: {},
|
||||
value: { "..": context },
|
||||
size: 0
|
||||
};
|
||||
var backupThis = rootNode.this;
|
||||
rootNode.this = results.value;
|
||||
typeArgs.forEach((typeArg) => {
|
||||
var readResults;
|
||||
tryCatch(() => {
|
||||
readResults = this.read(buffer, offset, typeArg.type, rootNode);
|
||||
var readResults = this.read(buffer, offset, typeArg.type, results.value);
|
||||
results.size += readResults.size;
|
||||
offset += readResults.size;
|
||||
if (typeArg.anon) {
|
||||
@ -124,19 +121,18 @@ function readContainer(buffer, offset, typeArgs, rootNode) {
|
||||
throw e;
|
||||
});
|
||||
});
|
||||
rootNode.this = backupThis;
|
||||
delete results.value[".."];
|
||||
return results;
|
||||
}
|
||||
|
||||
function writeContainer(value, buffer, offset, typeArgs, rootNode) {
|
||||
var backupThis = rootNode.this;
|
||||
rootNode.this = value;
|
||||
function writeContainer(value, buffer, offset, typeArgs, context) {
|
||||
value[".."] = context;
|
||||
typeArgs.forEach((typeArg) => {
|
||||
tryCatch(() => {
|
||||
if (typeArg.anon)
|
||||
offset = this.write(value, buffer, offset, typeArg.type, rootNode);
|
||||
offset = this.write(value, buffer, offset, typeArg.type, value);
|
||||
else
|
||||
offset = this.write(value[typeArg.name], buffer, offset, typeArg.type, rootNode);
|
||||
offset = this.write(value[typeArg.name], buffer, offset, typeArg.type, value);
|
||||
}, (e) => {
|
||||
if (typeArgs && typeArg && typeArg.name)
|
||||
addErrorField(e, typeArg.name);
|
||||
@ -145,20 +141,19 @@ function writeContainer(value, buffer, offset, typeArgs, rootNode) {
|
||||
throw e;
|
||||
});
|
||||
});
|
||||
rootNode.this = backupThis;
|
||||
delete value[".."];
|
||||
return offset;
|
||||
}
|
||||
|
||||
function sizeOfContainer(value, typeArgs, rootNode) {
|
||||
function sizeOfContainer(value, typeArgs, context) {
|
||||
value[".."] = context;
|
||||
var size = 0;
|
||||
var backupThis = rootNode.this;
|
||||
rootNode.this = value;
|
||||
typeArgs.forEach((typeArg) => {
|
||||
tryCatch(() => {
|
||||
if (typeArg.anon)
|
||||
size += this.sizeOf(value, typeArg.type, rootNode);
|
||||
size += this.sizeOf(value, typeArg.type, value);
|
||||
else
|
||||
size += this.sizeOf(value[typeArg.name], typeArg.type, rootNode);
|
||||
size += this.sizeOf(value[typeArg.name], typeArg.type, value);
|
||||
}, (e) => {
|
||||
if (typeArgs && typeArg && typeArg.name)
|
||||
addErrorField(e, typeArg.name);
|
||||
@ -167,7 +162,7 @@ function sizeOfContainer(value, typeArgs, rootNode) {
|
||||
throw e;
|
||||
});
|
||||
});
|
||||
rootNode.this = backupThis;
|
||||
delete value[".."];
|
||||
return size;
|
||||
}
|
||||
|
||||
|
@ -63,7 +63,7 @@ var packetStates = packetIndexes.packetStates;
|
||||
function createPacketBuffer(packetName, state, params, isServer) {
|
||||
var direction = !isServer ? 'toServer' : 'toClient';
|
||||
var packetId = packetIds[state][direction][packetName];
|
||||
assert.notEqual(packetId, undefined);
|
||||
assert.notEqual(packetId, undefined, `${state}.${isServer}.${packetName} : ${packetId}`);
|
||||
var packet = get(packetName, state, !isServer);
|
||||
assert.notEqual(packet, null);
|
||||
|
||||
@ -140,7 +140,8 @@ function parsePacketData(buffer, state, isServer, packetsToParse = {"packet": tr
|
||||
results.data = res.value;
|
||||
cursor += res.size;
|
||||
if(buffer.length > cursor)
|
||||
throw new Error(`Read error for ${packetName} : Packet data not entirely read`);
|
||||
throw new Error(`Read error for ${packetName} : Packet data not entirely read :
|
||||
${JSON.stringify(results)}`);
|
||||
debug(results);
|
||||
return results;
|
||||
}
|
||||
|
17
src/utils.js
17
src/utils.js
@ -5,13 +5,18 @@ module.exports = {
|
||||
tryCatch: tryCatch,
|
||||
};
|
||||
|
||||
function getField(countField, rootNode) {
|
||||
var countFieldArr = countField.split(".");
|
||||
var count = rootNode;
|
||||
for(var index = 0; index < countFieldArr.length; index++) {
|
||||
count = count[countFieldArr[index]];
|
||||
function getField(countField, context) {
|
||||
var countFieldArr = countField.split("/");
|
||||
var i = 0;
|
||||
if (countFieldArr[i] === "") {
|
||||
while (context.hasOwnProperty(".."))
|
||||
context = context[".."];
|
||||
i++;
|
||||
}
|
||||
return count;
|
||||
for(; i < countFieldArr.length; i++) {
|
||||
context = context[countFieldArr[i]];
|
||||
}
|
||||
return context;
|
||||
}
|
||||
|
||||
function getFieldInfo(fieldInfo) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user