Skip to content

Instantly share code, notes, and snippets.

@facugon
Last active November 24, 2016 21:43
Show Gist options
  • Save facugon/2a1258308c5757e9a53497dd7d8dd652 to your computer and use it in GitHub Desktop.
Save facugon/2a1258308c5757e9a53497dd7d8dd652 to your computer and use it in GitHub Desktop.
simple socket wrapper. trigger an event on every new received socket message.
/**
* @author Facugon
* Simple socket connector.
* how to use
*
* // connect sockets and start listening to events
* SocketsConnector({
* io: window.io,
* channel:'/socket/subscribe',
* query: {
* param: 'a custom param',
* },
* onSubscribed:function(data,jwres){
* log('subscribed to event updates');
* },
* events: {
* 'event-name': function eventHandler(data) {
* },
* 'another-event': function ... (data) {
* }
* }
* });
*
*/
// var Backbone = require('backbone');
// var _ = require('underscore');
// var debug = require('debug');
function SocketsConnector (options) {
if ( ! this instanceof SocketsConnector ) {
return new SocketsConnector(options);
}
_.extend(this, Backbone.Events);
var self = this;
var io = options.io;
var log = debug('eye::sockets');
for (var event in options.events) {
io.socket.on(event,function(message){
options.events[event](message);
});
}
function subscribe (socket) {
var emit = socket.emit;
socket.emit = function() {
log('socket emit', Array.prototype.slice.call(arguments));
emit.apply(socket, arguments);
};
var $emit = socket.$emit;
socket.$emit = function() {
log('socket event',Array.prototype.slice.call(arguments));
$emit.apply(socket, arguments);
self.trigger(arguments[0],arguments[1]);
};
socket.post(
options.channel,
options.query,
options.onSubscribed
);
}
if (io.socket.socket && io.socket.socket.connected) {
log('socket already connected, subscribing...');
subscribe(io.socket);
} else {
io.socket.on("connect",function(){
log('socket connected! subcribing...');
subscribe(io.socket);
});
}
return this;
}
//module.exports = SocketsConnector;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment