A Twitch.tv viewer reward and games system.
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
var Util = require('util'); var EventEmitter = require('events').EventEmitter; var Packets = require('../packets'); var ErrorConstants = require('../constants/errors');
module.exports = Sequence; Util.inherits(Sequence, EventEmitter); function Sequence(callback) { EventEmitter.call(this);
this._callback = callback; this._ended = false;
// Experimental: Long stack trace support
this._callSite = (new Error).stack.replace(/.+\n/, ''); }
Sequence.determinePacket = function(byte) { switch (byte) { case 0x00: return Packets.OkPacket; case 0xfe: return Packets.EofPacket; case 0xff: return Packets.ErrorPacket; } };
Sequence.prototype.hasErrorHandler = function() { return this._callback || this.listeners('error').length > 1; };
Sequence.prototype._packetToError = function(packet) { var code = ErrorConstants[packet.errno] || 'UNKNOWN_CODE_PLEASE_REPORT'; var err = new Error(code + ': ' + packet.message); err.code = code;
return err; };
Sequence.prototype._addLongStackTrace = function(err) { var delimiter = '\n --------------------\n' ; if (err.stack.indexOf(delimiter) > -1) { return; }
err.stack += delimiter + this._callSite; };
Sequence.prototype.end = function(err) { if (this._ended) { return; }
this._ended = true;
if (err) { this._addLongStackTrace(err); }
// try...finally for exception safety
try { if (err) { this.emit('error', err); } } finally { try { if (this._callback) { this._callback.apply(this, arguments); } } finally { this.emit('end'); } } };
Sequence.prototype['OkPacket'] = function(packet) { this.end(null, packet); };
Sequence.prototype['ErrorPacket'] = function(packet) { this.end(this._packetToError(packet)); };
// Implemented by child classes
Sequence.prototype.start = function() {};
|