mirror of
https://github.com/PrismarineJS/node-minecraft-protocol.git
synced 2025-05-20 18:20:25 -04:00
avoid dependency on iconv. makes it easier to use on windows. see #12
This commit is contained in:
parent
bfb392ea19
commit
8096a08afd
3 changed files with 37 additions and 24 deletions
|
@ -1,15 +1,17 @@
|
||||||
var Iconv = require('iconv').Iconv
|
var assert = require('assert');
|
||||||
, assert = require('assert')
|
|
||||||
, toUcs2 = new Iconv('UTF-8', 'utf16be')
|
|
||||||
, fromUcs2 = new Iconv('utf16be', 'UTF-8')
|
|
||||||
|
|
||||||
var STRING_MAX_LENGTH = 240;
|
var STRING_MAX_LENGTH = 240;
|
||||||
|
|
||||||
exports.version = 51;
|
module.exports = {
|
||||||
exports.minecraftVersion = '1.4.6';
|
version: 51,
|
||||||
exports.sessionVersion = 13;
|
minecraftVersion: '1.4.6',
|
||||||
exports.parsePacket = parsePacket;
|
sessionVersion: 13,
|
||||||
exports.createPacketBuffer = createPacketBuffer;
|
parsePacket: parsePacket,
|
||||||
|
createPacketBuffer: createPacketBuffer,
|
||||||
|
constants: {
|
||||||
|
STRING_MAX_LENGTH: STRING_MAX_LENGTH,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
var packets = {
|
var packets = {
|
||||||
0x00: [
|
0x00: [
|
||||||
|
@ -681,18 +683,20 @@ function readAscii (buffer, offset) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function readString (buffer, offset) {
|
function readString (buffer, offset) {
|
||||||
var results = readShort(buffer, offset);
|
var cursor = offset + 2;
|
||||||
if (! results) return null;
|
if (cursor > buffer.length) return null;
|
||||||
|
var stringLength = buffer.readInt16BE(offset);
|
||||||
var strBegin = offset + results.size;
|
var strEnd = cursor + stringLength * 2;
|
||||||
var strLen = results.value;
|
|
||||||
var strEnd = strBegin + strLen * 2;
|
|
||||||
if (strEnd > buffer.length) return null;
|
if (strEnd > buffer.length) return null;
|
||||||
var str = fromUcs2.convert(buffer.slice(strBegin, strEnd)).toString('utf8');
|
|
||||||
|
|
||||||
|
var value = '';
|
||||||
|
for (var i = 0; i < stringLength; ++i) {
|
||||||
|
value += String.fromCharCode(buffer.readUInt16BE(cursor));
|
||||||
|
cursor += 2;
|
||||||
|
}
|
||||||
return {
|
return {
|
||||||
value: str,
|
value: value,
|
||||||
size: strEnd - offset,
|
size: cursor - offset,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -878,14 +882,20 @@ SlotWriter.prototype.write = function(buffer, offset) {
|
||||||
};
|
};
|
||||||
|
|
||||||
function StringWriter(value) {
|
function StringWriter(value) {
|
||||||
|
assert.ok(value.length < STRING_MAX_LENGTH, "string greater than max length");
|
||||||
this.value = value;
|
this.value = value;
|
||||||
this.encoded = toUcs2.convert(value);
|
this.size = 2 + 2 * value.length;
|
||||||
this.size = 2 + this.encoded.length;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
StringWriter.prototype.write = function(buffer, offset) {
|
StringWriter.prototype.write = function(buffer, offset) {
|
||||||
buffer.writeInt16BE(this.value.length, offset);
|
var cursor = offset;
|
||||||
this.encoded.copy(buffer, offset + 2);
|
buffer.writeInt16BE(this.value.length, cursor);
|
||||||
|
cursor += 2;
|
||||||
|
|
||||||
|
for (var i = 0; i < this.value.length; ++i) {
|
||||||
|
buffer.writeUInt16BE(this.value.charCodeAt(i), cursor);
|
||||||
|
cursor += 2;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function ByteArray16Writer(value) {
|
function ByteArray16Writer(value) {
|
||||||
|
|
|
@ -33,7 +33,6 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ursa": "~0.8.0",
|
"ursa": "~0.8.0",
|
||||||
"superagent": "~0.10.0",
|
"superagent": "~0.10.0",
|
||||||
"iconv": "~1.2.4",
|
|
||||||
"batch": "~0.2.1"
|
"batch": "~0.2.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ var defaultServerProps = {
|
||||||
'motd': 'A Minecraft Server',
|
'motd': 'A Minecraft Server',
|
||||||
};
|
};
|
||||||
|
|
||||||
describe("minecraft protocol", function() {
|
describe("client", function() {
|
||||||
this.timeout(20000);
|
this.timeout(20000);
|
||||||
|
|
||||||
var mcServer;
|
var mcServer;
|
||||||
|
@ -213,3 +213,7 @@ describe("minecraft protocol", function() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
describe("server", function() {
|
||||||
|
it("kicks clients that do not emit keep alive");
|
||||||
|
it("responds to ping requests");
|
||||||
|
});
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue