minecraft.js
Version:
Minecraft data serialization/deserialization and networking
43 lines (33 loc) • 1.38 kB
JavaScript
var protocol = require(__dirname + '/protocol.js');
/** @constructor */
var Packet = module.exports = function(id, data, isServer) {
this.id = id;
this.data = data || {};
this.format = protocol.get(id, isServer);
};
Packet.prototype.toString = function(encoding) {
var buf = new Buffer(this.getSize());
var offset = 0;
buf.writeUInt8(this.id, offset);
var subBuffer = buf.slice(1);
for(var i = 0; i < this.format.length; i++) {
var toPack = this.data[this.format[i].name] || protocol.datatypes[this.format[i].type.toUpperCase()].empty;
var size = protocol.datatypes[this.format[i].type.toUpperCase()].pack(toPack, subBuffer);
subBuffer = subBuffer.slice(size);
}
if(encoding == 'buffer') return buf;
else return buf.toString(encoding || 'utf8');
};
Packet.prototype.getSize = function() {
if( typeof this._size != 'undefined')
return this._size;
var output = 1;
for(var i = 0; i < this.format.length; i++) {
if(!protocol.datatypes[this.format[i].type.toUpperCase()].dynamic) {
output += protocol.datatypes[this.format[i].type.toUpperCase()].size;
} else {
output += protocol.datatypes[this.format[i].type.toUpperCase()].getSize(this.data[this.format[i].name]);
}
}
return output;
};