Skip to content

Instantly share code, notes, and snippets.

@andrewrk
Created September 23, 2012 22:41
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 andrewrk/3773308 to your computer and use it in GitHub Desktop.
Save andrewrk/3773308 to your computer and use it in GitHub Desktop.
send and receive JSON over a socket
exports.listen = function(socket, onMessage){
var buffer;
socket.setEncoding('utf8');
buffer = "";
function msgFromBuffer(){
var sep, msg_len, next_msg_start, result;
sep = buffer.indexOf("\n");
if (sep === -1) {
return null;
}
msg_len = parseInt(buffer.substring(0, sep));
next_msg_start = sep + msg_len + 1;
if (next_msg_start > buffer.length) {
return null;
}
result = JSON.parse(buffer.substring(sep + 1, next_msg_start));
buffer = buffer.substring(next_msg_start);
return result;
}
socket.on('data', function(data){
var msg;
buffer += data;
while (msg = msgFromBuffer()) {
onMessage(msg);
}
});
}
exports.send(socket, object){
var str_msg;
str_msg = JSON.stringify(object);
socket.write(str_msg.length + "\n" + str_msg);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment