UNPKG

jarvisnode

Version:

A library written in Node.js used to communicate with my Jarvis project

86 lines (59 loc) 1.92 kB
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;