First commit, most of the backend system! :)
This commit is contained in:
81
lib/mcpc_buffer.js
Normal file
81
lib/mcpc_buffer.js
Normal file
@ -0,0 +1,81 @@
|
||||
function CustomBuffer(existingBuffer) {
|
||||
var buffer = existingBuffer || new Buffer(48);
|
||||
var offset = 0;
|
||||
|
||||
this.writeVarInt = function(val) {
|
||||
while (true) {
|
||||
if ((val & 0xFFFFFF80) == 0) {
|
||||
this.writeUByte(val);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
this.writeUByte(val & 0x7F | 0x80);
|
||||
|
||||
val = val >>> 7;
|
||||
}
|
||||
};
|
||||
|
||||
this.writeString = function(string) {
|
||||
this.writeVarInt(string.length);
|
||||
|
||||
if (offset + string.length >= buffer.length) {
|
||||
Buffer.concat([buffer, new Buffer(string.length)]);
|
||||
}
|
||||
|
||||
buffer.write(string, offset, string.length, "UTF-8");
|
||||
|
||||
offset += string.length;
|
||||
};
|
||||
|
||||
this.writeUShort = function(val) {
|
||||
this.writeUByte(val >> 8);
|
||||
this.writeUByte(val & 0xFF);
|
||||
};
|
||||
|
||||
this.writeUByte = function(val) {
|
||||
if (offset + 1 >= buffer.length) {
|
||||
Buffer.concat([buffer, new Buffer(50)]);
|
||||
}
|
||||
|
||||
buffer.writeUInt8(val, offset++);
|
||||
};
|
||||
|
||||
this.readVarInt = function() {
|
||||
var val = 0;
|
||||
var count = 0;
|
||||
|
||||
while (true) {
|
||||
var i = buffer.readUInt8(offset++);
|
||||
|
||||
val |= (i & 0x7F) << count++ * 7;
|
||||
|
||||
if ((i & 0x80) != 128) {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return val;
|
||||
};
|
||||
|
||||
this.readString = function() {
|
||||
var length = this.readVarInt();
|
||||
var str = buffer.toString("UTF-8", offset, offset + length);
|
||||
|
||||
offset += length;
|
||||
|
||||
return str;
|
||||
};
|
||||
|
||||
this.buffer = function() {
|
||||
return buffer.slice(0, offset);
|
||||
};
|
||||
|
||||
this.offset = function() {
|
||||
return offset;
|
||||
};
|
||||
}
|
||||
|
||||
exports.createBuffer = function(buffer) {
|
||||
return new CustomBuffer(buffer);
|
||||
};
|
Reference in New Issue
Block a user