jarvisnode
Version:
A library written in Node.js used to communicate with my Jarvis project
86 lines (59 loc) • 1.92 kB
JavaScript
var types = require('../types');
var udp = require('./utils');
var util = require('util');
var EventEmitter = require('events').EventEmitter;
var debug = require('debug')('jarvisnode:udp');
function Handler() {
var self = this;
self.dgram = require('dgram').createSocket('udp4');
self.dgram.on('message', function(data, remote) {
self._compute(data, remote);
});
};
util.inherits(Handler, EventEmitter);
Handler.prototype.start = function() {
var self = this;
var config = require('../config').get();
self.dgram.bind(config.ports.UDP_PORT, '0.0.0.0', function() {
self.dgram.setBroadcast(true);
self.dgram.addMembership(config.MULT_IP, require('ip').address());
self.emit('start');
});
};
Handler.prototype.requestAddress = function() {
var self = this;
udp.findAddress(function(cache, buf) {
if (cache)
return self.emit('jarvis-address');
self.dgram.send(buf, 0, buf.length, require('../config').get().ports.J_UDP_PORT, '255.255.255.255');
});
};
Handler.prototype.throwEvent = function(code, message) {
var self = this;
udp.event(code, message, function(err, buf) {
self.dgram.send(buf, 0, buf.length,
require('../config').get().ports.J_UDP_PORT,
require('../config').get().J_IP);
});
};
Handler.prototype._compute = function(data, remote) {
var self = this;
var config = require('../config').get();
switch(data[0]) {
case types.messages.UDP.J.ONLINE:
self.requestAddress();
self.emit('jarvis-online');
break;
case types.messages.UDP.J.OFFLINE:
self.stopHeartbeat();
self.emit('jarvis-offline');
break;
case types.messages.UDP.J.ADDRESS:
config.J_IP = data.slice(1).toString();
require('../config').save(function() {
self.emit('jarvis-address');
});
break;
}
};
module.exports = Handler;