UNPKG

node-peercast

Version:
77 lines (76 loc) 2.46 kB
var log4js = require('log4js'); var Atom = require('./atom'); var logger = log4js.getLogger(); var AtomReader = (function () { function AtomReader() { } AtomReader.prototype.read = function (stream) { if (this.name == null) { var headerBuffer = stream.read(8); if (headerBuffer == null) { return null; } this.name = headerBuffer.toString('ascii', 0, 4); this.length = headerBuffer.readUInt32LE(4); } logger.debug('Atom reading: ' + this.name); if ((this.length & 0x80000000) !== 0) { if (this.containerReader == null) { this.containerReader = new AtomContainerReader(this.length & 0x7FFFFFFF); } var children = this.containerReader.read(stream); if (children == null) { logger.debug('no children.'); return null; } var container = Atom.createContainer(this.name, children); this.clear(); return container; } else { var contentBuffer; if (this.length === 0) { contentBuffer = null; } else { contentBuffer = stream.read(this.length); if (contentBuffer == null) { logger.debug('no data: ' + this.length); return null; } } var content = Atom.createContent(this.name, contentBuffer); this.clear(); return content; } }; AtomReader.prototype.clear = function () { this.name = null; this.length = 0; this.containerReader = null; }; return AtomReader; })(); var AtomContainerReader = (function () { function AtomContainerReader(length) { this.length = length; this.children = []; } AtomContainerReader.prototype.read = function (stream) { for (;;) { if (this.reader == null) { this.reader = new AtomReader(); } var atom = this.reader.read(stream); if (atom == null) { return null; } this.children.push(atom); if (this.children.length >= this.length) { return this.children; } } }; return AtomContainerReader; })(); module.exports = AtomReader;