Skip to content

Instantly share code, notes, and snippets.

@DanielG
Created February 26, 2012 14:32
Show Gist options
  • Select an option

  • Save DanielG/1917035 to your computer and use it in GitHub Desktop.

Select an option

Save DanielG/1917035 to your computer and use it in GitHub Desktop.
EventEmitter for line based protocols
var util = require('util');
var EventEmitter = require('events').EventEmitter;
var OneLiner = module.exports = function OneLiner(stream){
var self = this;
self.line_regex = /\n\r?|\r\n?/;
var buffer = '';
stream.on('data', function(chunk) {
buffer += chunk.toString();
var lines = buffer.split(self.line_regex);
var rest;
lines.forEach(function(line, i) {
if(i == lines.length-1 && lines[i+1] !== '') {
rest = lines[i];
return;
}
self.emit('line', line);
});
buffer = rest;
});
if(self.emit_truncated) {
stream.on('end', function(){
buffer.length && self.emit('line', buffer.shift());
buffer = undefined;
});
}
stream.on('end', function(){
stream.removeAllListeners('line');
});
}
util.inherits(OneLiner, EventEmitter);
OneLiner.read_line = function(stream, callback){
var liner = new OneLiner(stream);
liner.on('line', callback);
return liner;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment