mirror of
https://github.com/unmojang/node-minecraft-protocol.git
synced 2025-10-03 07:59:50 -04:00
Merge pull request #29 from roblabla/bugfix-serverAsserts
Bugfix server asserts. closes #22
This commit is contained in:
commit
5f4f8c529d
@ -29,6 +29,11 @@ Client.prototype.setSocket = function(socket) {
|
|||||||
while (true) {
|
while (true) {
|
||||||
parsed = parsePacket(incomingBuffer, self.isServer);
|
parsed = parsePacket(incomingBuffer, self.isServer);
|
||||||
if (! parsed) break;
|
if (! parsed) break;
|
||||||
|
if (parsed.error) {
|
||||||
|
this.emit('error', parsed.error);
|
||||||
|
this.end("ProtocolError");
|
||||||
|
return;
|
||||||
|
}
|
||||||
packet = parsed.results;
|
packet = parsed.results;
|
||||||
incomingBuffer = incomingBuffer.slice(parsed.size);
|
incomingBuffer = incomingBuffer.slice(parsed.size);
|
||||||
self.emit(packet.id, packet);
|
self.emit(packet.id, packet);
|
||||||
|
@ -727,9 +727,17 @@ function readEntityMetadata(buffer, offset) {
|
|||||||
type = item >> 5;
|
type = item >> 5;
|
||||||
typeName = entityMetadataTypes[type];
|
typeName = entityMetadataTypes[type];
|
||||||
dataType = types[typeName];
|
dataType = types[typeName];
|
||||||
assert.ok(dataType, "unrecognized entity metadata type " + type);
|
if (!dataType) {
|
||||||
|
return {
|
||||||
|
error: new Error("unrecognized entity metadata type " + type)
|
||||||
|
}
|
||||||
|
}
|
||||||
reader = dataType[0];
|
reader = dataType[0];
|
||||||
assert.ok(reader, "missing reader for entity metadata type " + type);
|
if (!reader) {
|
||||||
|
return {
|
||||||
|
error: new Error("missing reader for entity metadata type " + type)
|
||||||
|
}
|
||||||
|
}
|
||||||
results = reader(buffer, cursor);
|
results = reader(buffer, cursor);
|
||||||
if (! results) return null;
|
if (! results) return null;
|
||||||
metadata.push({
|
metadata.push({
|
||||||
@ -808,7 +816,11 @@ function readMapChunkBulk (buffer, offset) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
assert.strictEqual(chunkColumnCount, meta.length);
|
if (chunkColumnCount !== meta.length) {
|
||||||
|
return {
|
||||||
|
error: new Error("ChunkColumnCount different from length of meta")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
value: {
|
value: {
|
||||||
@ -1163,7 +1175,9 @@ LongWriter.prototype.write = function(buffer, offset) {
|
|||||||
|
|
||||||
function get(packetId, toServer) {
|
function get(packetId, toServer) {
|
||||||
var packetInfo = packets[packetId];
|
var packetInfo = packets[packetId];
|
||||||
assert.ok(packetInfo, "unrecognized packet id: " + packetId);
|
if (!packetInfo) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
return Array.isArray(packetInfo) ?
|
return Array.isArray(packetInfo) ?
|
||||||
packetInfo :
|
packetInfo :
|
||||||
toServer ?
|
toServer ?
|
||||||
@ -1175,6 +1189,7 @@ function createPacketBuffer(packetId, params, isServer) {
|
|||||||
var size = 1;
|
var size = 1;
|
||||||
var fields = [ new UByteWriter(packetId) ];
|
var fields = [ new UByteWriter(packetId) ];
|
||||||
var packet = get(packetId, !isServer);
|
var packet = get(packetId, !isServer);
|
||||||
|
assert.notEqual(packet, null);
|
||||||
packet.forEach(function(fieldInfo) {
|
packet.forEach(function(fieldInfo) {
|
||||||
var value = params[fieldInfo.name];
|
var value = params[fieldInfo.name];
|
||||||
var Writer = types[fieldInfo.type][1];
|
var Writer = types[fieldInfo.type][1];
|
||||||
@ -1198,14 +1213,28 @@ function parsePacket(buffer, isServer) {
|
|||||||
var size = 1;
|
var size = 1;
|
||||||
var results = { id: packetId };
|
var results = { id: packetId };
|
||||||
var packetInfo = get(packetId, isServer);
|
var packetInfo = get(packetId, isServer);
|
||||||
assert.ok(packetInfo, "Unrecognized packetId: " + packetId);
|
if (packetInfo == null) {
|
||||||
|
return {
|
||||||
|
error: new Error("Unrecognized packetId: " + packetId)
|
||||||
|
}
|
||||||
|
}
|
||||||
var i, fieldInfo, read, readResults;
|
var i, fieldInfo, read, readResults;
|
||||||
for (i = 0; i < packetInfo.length; ++i) {
|
for (i = 0; i < packetInfo.length; ++i) {
|
||||||
fieldInfo = packetInfo[i];
|
fieldInfo = packetInfo[i];
|
||||||
read = types[fieldInfo.type][0];
|
read = types[fieldInfo.type][0];
|
||||||
assert.ok(read, "missing reader for data type: " + fieldInfo.type);
|
if (!read) {
|
||||||
|
return {
|
||||||
|
error: new Error("missing reader for data type: " + fieldInfo.type)
|
||||||
|
}
|
||||||
|
}
|
||||||
readResults = read(buffer, size);
|
readResults = read(buffer, size);
|
||||||
if (readResults) {
|
if (readResults) {
|
||||||
|
// if readResults.error is undef, error stays undef'd
|
||||||
|
if (readResults.error) {
|
||||||
|
return {
|
||||||
|
error: readResults.error
|
||||||
|
}
|
||||||
|
}
|
||||||
results[fieldInfo.name] = readResults.value;
|
results[fieldInfo.name] = readResults.value;
|
||||||
size += readResults.size;
|
size += readResults.size;
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user