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 = {
|
var results = {
|
||||||
value: {},
|
value: { "..": context },
|
||||||
size: 0
|
size: 0
|
||||||
};
|
};
|
||||||
var backupThis = rootNode.this;
|
|
||||||
rootNode.this = results.value;
|
|
||||||
typeArgs.forEach((typeArg) => {
|
typeArgs.forEach((typeArg) => {
|
||||||
var readResults;
|
|
||||||
tryCatch(() => {
|
tryCatch(() => {
|
||||||
readResults = this.read(buffer, offset, typeArg.type, rootNode);
|
var readResults = this.read(buffer, offset, typeArg.type, results.value);
|
||||||
results.size += readResults.size;
|
results.size += readResults.size;
|
||||||
offset += readResults.size;
|
offset += readResults.size;
|
||||||
if (typeArg.anon) {
|
if (typeArg.anon) {
|
||||||
@ -124,19 +121,18 @@ function readContainer(buffer, offset, typeArgs, rootNode) {
|
|||||||
throw e;
|
throw e;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
rootNode.this = backupThis;
|
delete results.value[".."];
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
function writeContainer(value, buffer, offset, typeArgs, rootNode) {
|
function writeContainer(value, buffer, offset, typeArgs, context) {
|
||||||
var backupThis = rootNode.this;
|
value[".."] = context;
|
||||||
rootNode.this = value;
|
|
||||||
typeArgs.forEach((typeArg) => {
|
typeArgs.forEach((typeArg) => {
|
||||||
tryCatch(() => {
|
tryCatch(() => {
|
||||||
if (typeArg.anon)
|
if (typeArg.anon)
|
||||||
offset = this.write(value, buffer, offset, typeArg.type, rootNode);
|
offset = this.write(value, buffer, offset, typeArg.type, value);
|
||||||
else
|
else
|
||||||
offset = this.write(value[typeArg.name], buffer, offset, typeArg.type, rootNode);
|
offset = this.write(value[typeArg.name], buffer, offset, typeArg.type, value);
|
||||||
}, (e) => {
|
}, (e) => {
|
||||||
if (typeArgs && typeArg && typeArg.name)
|
if (typeArgs && typeArg && typeArg.name)
|
||||||
addErrorField(e, typeArg.name);
|
addErrorField(e, typeArg.name);
|
||||||
@ -145,20 +141,19 @@ function writeContainer(value, buffer, offset, typeArgs, rootNode) {
|
|||||||
throw e;
|
throw e;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
rootNode.this = backupThis;
|
delete value[".."];
|
||||||
return offset;
|
return offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
function sizeOfContainer(value, typeArgs, rootNode) {
|
function sizeOfContainer(value, typeArgs, context) {
|
||||||
|
value[".."] = context;
|
||||||
var size = 0;
|
var size = 0;
|
||||||
var backupThis = rootNode.this;
|
|
||||||
rootNode.this = value;
|
|
||||||
typeArgs.forEach((typeArg) => {
|
typeArgs.forEach((typeArg) => {
|
||||||
tryCatch(() => {
|
tryCatch(() => {
|
||||||
if (typeArg.anon)
|
if (typeArg.anon)
|
||||||
size += this.sizeOf(value, typeArg.type, rootNode);
|
size += this.sizeOf(value, typeArg.type, value);
|
||||||
else
|
else
|
||||||
size += this.sizeOf(value[typeArg.name], typeArg.type, rootNode);
|
size += this.sizeOf(value[typeArg.name], typeArg.type, value);
|
||||||
}, (e) => {
|
}, (e) => {
|
||||||
if (typeArgs && typeArg && typeArg.name)
|
if (typeArgs && typeArg && typeArg.name)
|
||||||
addErrorField(e, typeArg.name);
|
addErrorField(e, typeArg.name);
|
||||||
@ -167,7 +162,7 @@ function sizeOfContainer(value, typeArgs, rootNode) {
|
|||||||
throw e;
|
throw e;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
rootNode.this = backupThis;
|
delete value[".."];
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@ var packetStates = packetIndexes.packetStates;
|
|||||||
function createPacketBuffer(packetName, state, params, isServer) {
|
function createPacketBuffer(packetName, state, params, isServer) {
|
||||||
var direction = !isServer ? 'toServer' : 'toClient';
|
var direction = !isServer ? 'toServer' : 'toClient';
|
||||||
var packetId = packetIds[state][direction][packetName];
|
var packetId = packetIds[state][direction][packetName];
|
||||||
assert.notEqual(packetId, undefined);
|
assert.notEqual(packetId, undefined, `${state}.${isServer}.${packetName} : ${packetId}`);
|
||||||
var packet = get(packetName, state, !isServer);
|
var packet = get(packetName, state, !isServer);
|
||||||
assert.notEqual(packet, null);
|
assert.notEqual(packet, null);
|
||||||
|
|
||||||
@ -140,7 +140,8 @@ function parsePacketData(buffer, state, isServer, packetsToParse = {"packet": tr
|
|||||||
results.data = res.value;
|
results.data = res.value;
|
||||||
cursor += res.size;
|
cursor += res.size;
|
||||||
if(buffer.length > cursor)
|
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);
|
debug(results);
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
17
src/utils.js
17
src/utils.js
@ -5,13 +5,18 @@ module.exports = {
|
|||||||
tryCatch: tryCatch,
|
tryCatch: tryCatch,
|
||||||
};
|
};
|
||||||
|
|
||||||
function getField(countField, rootNode) {
|
function getField(countField, context) {
|
||||||
var countFieldArr = countField.split(".");
|
var countFieldArr = countField.split("/");
|
||||||
var count = rootNode;
|
var i = 0;
|
||||||
for(var index = 0; index < countFieldArr.length; index++) {
|
if (countFieldArr[i] === "") {
|
||||||
count = count[countFieldArr[index]];
|
while (context.hasOwnProperty(".."))
|
||||||
|
context = context[".."];
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
return count;
|
for(; i < countFieldArr.length; i++) {
|
||||||
|
context = context[countFieldArr[i]];
|
||||||
|
}
|
||||||
|
return context;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getFieldInfo(fieldInfo) {
|
function getFieldInfo(fieldInfo) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user