Skip to content

Instantly share code, notes, and snippets.

@aikar
Created November 17, 2010 04:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aikar/702985 to your computer and use it in GitHub Desktop.
Save aikar/702985 to your computer and use it in GitHub Desktop.
/*
* Node Network Protocol Parser
* https://github.com/miksago/ideabin/wiki/Node-Network-Protocol
*/
function NNPParser(readStream, callback)
{
var self = this;
if(callback) self.addListener('msg', callback);
var buffer = '';
var len = '';
var hasLen = false;
var i = 0;
readStream.on('data', function(data)
{
if(data && data.length)
{
buffer += data;
if(!hasLen)
{
for(; i < buffer.length; i++)
{
if(buffer[i] === ',')
{
hasLen = true;
len = parseInt(len);
i++;
break;
}else{
len += buffer[i];
}
}
}
if(hasLen)
{
if(i + len <= buffer.length)
{
self.emit('msg', buffer.substr(i, len));
hasLen = false;
len = '';
i = 0;
if(i + len == buffer.length)
{
buffer = '';
}else{
buffer = buffer.substr(i + len);
}
}
}
}
});
}
require('sys').inherits(NNPParser, require('events').EventEmitter);
module.exports = function(readStream, callback)
{
return new NNPParser(readStream, callback);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment