UNPKG

diaonan

Version:

A REST bridge to MQTT, CoAP

144 lines (132 loc) 3.34 kB
var EventEmitter, KEYS_SET_NAME, events, globalEventEmitter; EventEmitter = require('events').EventEmitter; globalEventEmitter = new EventEmitter(); globalEventEmitter.setMaxListeners(0); events = {}; KEYS_SET_NAME = 'topics'; module.exports = function (app) { var Data, buildKey; buildKey = function (key) { return "topic:" + key; }; Data = (function () { function Data(key, value) { this.key = key; this.value = value; this.value || (this.value = null); } Object.defineProperty(Data.prototype, 'key', { enumerable: true, configurable: false, get: function () { return this._key; }, set: function (key) { this.redisKey = buildKey(key); return this._key = key; } }); Object.defineProperty(Data.prototype, 'jsonValue', { configurable: false, enumerable: true, get: function () { return JSON.stringify(this.value); }, set: function (val) { return this.value = JSON.parse(val); } }); Data.prototype.save = function (callback) { app.redis.client.set(this.redisKey, this.jsonValue, (function (_this) { return function (err) { return app.ascoltatore.publish(_this.key, _this.value, function () { if (callback != null) { return callback(err, _this); } }); }; })(this)); return app.redis.client.sadd(KEYS_SET_NAME, this.key); }; return Data; })(); Data.find = function (pattern, callback) { var foundRecord; foundRecord = function (key) { return app.redis.client.get(buildKey(key), function (err, value) { if (err) { if (callback != null) { callback(err); } return; } if (value == null) { if (callback != null) { callback("Record not found"); } return; } if (callback != null) { return callback(null, Data.fromRedis(key, value)); } }); }; if (pattern.constructor !== RegExp) { foundRecord(pattern); } else { app.redis.client.smembers(KEYS_SET_NAME, function (err, topics) { var topic, _i, _len, _results; _results = []; for (_i = 0, _len = topics.length; _i < _len; _i++) { topic = topics[_i]; if (pattern.test(topic)) { _results.push(foundRecord(topic)); } else { _results.push(void 0); } } return _results; }); } return Data; }; Data.findOrCreate = function () { var arg, args, callback, key, value; args = Array.prototype.slice.call(arguments); key = args.shift(); arg = args.shift(); if (typeof arg === 'function') { callback = arg; } else { value = arg; callback = args.shift(); } app.redis.client.get(buildKey(key), function (err, oldValue) { var data; data = Data.fromRedis(key, oldValue); if (value != null) { data.value = value; } return data.save(callback); }); return Data; }; Data.fromRedis = function (topic, value) { var data; data = new Data(topic); data.jsonValue = value; return data; }; Data.subscribe = function (topic, callback) { callback._subscriber = function (actualTopic, value) { return callback(new Data(actualTopic, value)); }; app.ascoltatore.subscribe(topic, callback._subscriber); return this; }; Data.unsubscribe = function (topic, callback) { app.ascoltatore.unsubscribe(topic, callback._subscriber); return this; }; return Data; };