UNPKG

minecraft.js

Version:

Minecraft data serialization/deserialization and networking

43 lines (33 loc) 1.38 kB
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; };