UNPKG

serf-rpc

Version:

A simple nodejs module for interacting with the Serf RPC protocol.

54 lines (41 loc) 1.38 kB
var net = require('net').Socket(); var events = require('events'); var _ = require("lodash"); var msgpack = require([__dirname, "msgpack"].join("/")); function Network(options, fn){ this.options = options; } Network.prototype.connect = function(fn){ var serve; var self = this; net.connect(this.options.rpc_port, this.options.rpc_host, function(){ net.on("data", function(data){ var decoded = msgpack.decode(data); _.each(decoded, function(values, seq){ self.emitter.emit(seq, _.last(values)); }); }); fn(); }); net.on("error", function(){ var address = [self.options.rpc_host,self.options.rpc_port].join(":"); fn(new Error(["Could not connect to Serf RPC at", address].join(" "))); }); } Network.prototype.emitter = new events.EventEmitter(); Network.prototype.send = function(data_list, fn){ var self = this; _.each(data_list, function(data){ net.write(msgpack.encode(data)); if(_.has(data, "Seq")){ self.emitter.once(data.Seq, function(response){ var err = false; if(_.has(response, "Error") && response.Error != "") err = true; fn(err, response); }); } }); } Network.prototype.conn_track = {}; module.exports = Network;