Merge pull request #3 from hugocore/master

Node.js plugin - v0.1
master
Jim Heising 2014-07-16 09:31:33 -07:00
commit 08ca8d9de4
2 changed files with 54 additions and 45 deletions

View File

@ -12,24 +12,19 @@
var nodeJSDatasource = function(settings, updateCallback) { var nodeJSDatasource = function(settings, updateCallback) {
var self = this; var self = this,
var currentSettings = settings; currentSettings = settings,
var url; url,
var socket; socket,
var newMessageCallback; newMessageCallback;
function onNewMessageHandler(message) { function onNewMessageHandler(message) {
console.debug("Message received %s", message);
var objdata = JSON.parse(message); var objdata = JSON.parse(message);
if (typeof objdata == "object") { if (typeof objdata == "object") {
updateCallback(objdata); updateCallback(objdata);
} else { } else {
updateCallback(data); updateCallback(data);
} }
} }
function joinRoom(roomName, roomEvent) { function joinRoom(roomName, roomEvent) {
@ -39,15 +34,22 @@
console.info("Joining room '%s' with event '%s'", roomName, roomEvent); console.info("Joining room '%s' with event '%s'", roomName, roomEvent);
} }
function discardSocket() {
// Disconnect datasource websocket
if (self.socket) {
self.socket.disconnect();
}
}
function connectToServer(url, rooms) { function connectToServer(url, rooms) {
// Establish connection with server // Establish connection with server
self.url = url; self.url = url;
self.socket = io.connect(self.url); self.socket = io.connect(self.url,{'forceNew':true});
// Join the rooms // Join the rooms
self.socket.on('connect', function() { self.socket.on('connect', function() {
console.info("Connecting to Node.js at: %s", self.url); console.info("Connecting to Node.js at: %s", self.url);
});
// Join the rooms // Join the rooms
_.each(rooms, function(roomConfig) { _.each(rooms, function(roomConfig) {
@ -59,7 +61,6 @@
} }
}); });
});
self.socket.on('connect_error', function(object) { self.socket.on('connect_error', function(object) {
console.error("It was not possible to connect to Node.js at: %s", self.url); console.error("It was not possible to connect to Node.js at: %s", self.url);
@ -70,38 +71,30 @@
}); });
self.socket.on('reconnect_failed', function(object) { self.socket.on('reconnect_failed', function(object) {
console.error("Stopping re-connecting to Node.js at: %s", self.url); console.error("Re-connection to Node.js failed at: %s", self.url);
discardSocket();
}); });
} }
function disconnecFromServer() {
// Disconnect any older socket
if (self.socket) {
self.socket.disconnect();
console.info("Disconnected from Node.js: %s", self.url);
}
}
function initializeDataSource() { function initializeDataSource() {
console.info("Subscribing to event: %s", currentSettings.eventName);
// Reset connection to server // Reset connection to server
disconnecFromServer(); discardSocket();
connectToServer(currentSettings.url, currentSettings.rooms); connectToServer(currentSettings.url, currentSettings.rooms);
// Subscribe to the events // Subscribe to the events
var newEventName = currentSettings.eventName; var newEventName = currentSettings.eventName;
self.newMessageCallback = onNewMessageHandler; self.newMessageCallback = onNewMessageHandler;
self.socket.on(newEventName, function(message) { _.each(currentSettings.events, function(eventConfig) {
var event = eventConfig.eventName;
console.info("Subscribing to event: %s", event);
self.socket.on(event, function(message) {
self.newMessageCallback(message); self.newMessageCallback(message);
}); });
});
} }
initializeDataSource();
this.updateNow = function() { this.updateNow = function() {
// Just seat back, relax and wait for incoming events // Just seat back, relax and wait for incoming events
return; return;
@ -112,12 +105,15 @@
self.newMessageCallback = function(message) { self.newMessageCallback = function(message) {
return; return;
}; };
discardSocket();
}; };
this.onSettingsChanged = function(newSettings) { this.onSettingsChanged = function(newSettings) {
currentSettings = newSettings; currentSettings = newSettings;
initializeDataSource(); initializeDataSource();
}; };
initializeDataSource();
}; };
freeboard freeboard
@ -134,10 +130,15 @@
type : "text" type : "text"
}, },
{ {
name : "eventName", name : "events",
display_name : "Events", display_name : "Events",
description : "The name of the events you want this datasource to subscribe to.", description : "The name of the events you want this datasource to subscribe to.",
type : "array",
settings : [ {
name : "eventName",
display_name : "Event",
type : "text" type : "text"
} ]
}, },
{ {
name : "rooms", name : "rooms",

View File

@ -106,12 +106,16 @@
"type": "node_js", "type": "node_js",
"settings": { "settings": {
"url": "http://localhost:8989/shows", "url": "http://localhost:8989/shows",
"eventName": "house.stark.jon",
"rooms": [ "rooms": [
{ {
"roomName": "got", "roomName": "got",
"roomEvent": "subscribe" "roomEvent": "subscribe"
} }
],
"events": [
{
"eventName": "house.stark.jon"
}
] ]
} }
}, },
@ -120,12 +124,16 @@
"type": "node_js", "type": "node_js",
"settings": { "settings": {
"url": "http://localhost:8989/shows", "url": "http://localhost:8989/shows",
"eventName": "house.lannister.tyrion",
"rooms": [ "rooms": [
{ {
"roomName": "got", "roomName": "got",
"roomEvent": "subscribe" "roomEvent": "subscribe"
} }
],
"events": [
{
"eventName": "house.lannister.tyrion"
}
] ]
} }
} }