I'm configuring a nodejs server in order to use it as a server for push notifications.
I have this code:
io.sockets.on('connection', function(socket) {
console.log(socket);
// watching the xml file
fs.watchFile('client.xml', function(curr, prev) {
// on file change we can read the new xml
fs.readFile('client.xml', function(err, data) {
if (err)
throw err;
// parsing the new xml datas and converting them into json file
parser.parseString(data);
});
});
// when the parser ends the parsing we are ready to send the new data to the
// frontend page
parser.addListener('end', function(result) {
socket.volatile.emit('notification', result);
});
});
On server. And on client this one:
<script>
function test(data) {
console.log(data);
jQuery('#' + data.id).html(data.content);
}
</script>
<script>
// creating a new websocket
var socket = io.connect('http://10.0.0.113:8000');
// on every message recived we print the new datas inside the #container div
socket.emit('data', {id : 'id'});
socket.set('nickname', {id : 'test'});
socket.on('notification', function(data) {
_efbn(data.callback, window, data.response, data);
});
/**
* Función que ejecuta una función por nombre. Puede usar namespaces
* (algo.algo.algo.funct)
*
* @see http://stackoverflow.com/questions/359788/javascript-function-name-as-a-string/359910#359910
*/
function _efbn(functionName, context) {
var args = Array.prototype.slice.call(arguments);
args = [ args[2], args[3] ]; // Fix para IE.
var namespaces = functionName.split(".");
var func = namespaces.pop();
for ( var i = 0; i < namespaces.length; i++) {
context = context[namespaces[i]];
}
try {
if (typeof context[func] == 'function') {
return context[func].apply(this, args);
}
} catch (e) {
console.log(e);
}
return null;
}
</script>
Everything is working as I wish. However, I want to send something like:
socket.set('site', '12345');
socket.set('object', 'ABCDE');
In order to identify which xml should I be listening, instead of being listening allways to client.xml.
How can I do it? I have this on server.js:
id = require('url').parse(req.url, true).query.id;
But, since server its only executed when the connection is open, but no when the socket is open, if the connection between the client and the server fails, when jquery retries to open the socket, id will be null...