@lore/websockets-sails v0.14.0-beta.3
@lore/websockets-sails
The Sails hook behaves identical to the SocketIo hook, except for the implementation. The big callout here is that
you need to install both the socket.io-client and the sails.io.js package (that takes the socket.io client as
an argument). You also need to set the URL immediately after creating this object, as it will try to call out to
the server. Alternatively, you can set io.sails.url.authConnect = false. I'm still playing with this implementation
a bit, but am leaning towards that solution (so that it doesn't make ANY server calls until you tell it to).
The other thing to point out is the dispatch implementation. For the most part Sails used a message structure
consisting of verb and data fields, but sometimes replaces data with previous when it comes to updated and
deleted data. So the parse method has been modified to convert everything into a verb/data structure.
var _ = require('lodash');
var WebSocketConnection = require('lore-websockets').WebSocketConnection;
var io = require('socket.io-client');
var SailsIOClient = require('sails.io.js');
var SOCKET_VERBS = {
CREATED: 'created',
UPDATED: 'updated',
DESTROYED: 'destroyed',
ADDED_TO: 'addedTo'
};
module.exports = WebSocketConnection.extend({
// serverUrl: 'http://localhost:1337',
// namespace: '/posts',
// event: 'post',
initialize: function(dispatchers, actions) {
this.io = SailsIOClient(io);
this.io.sails.url = this.serverUrl;
},
connect: function() {
var namespace = this.namespace;
// we have to make a GET request to this endpoint before we're connected
this.io.socket.get(namespace, function() {
console.log(`Connected to ${namespace}`);
});
},
subscribe: function() {
this.io.socket.on(this.event, this.dispatch);
},
unsubscribe: function() {
this.io.socket.off(this.event, this.dispatch);
},
parse: function(message) {
if (message.verb === SOCKET_VERBS.CREATED) {
return {
verb: message.verb,
data: message.data
}
} else if (message.verb === SOCKET_VERBS.UPDATED) {
return {
verb: message.verb,
data: message.data
}
} else if (message.verb === SOCKET_VERBS.DESTROYED) {
return {
verb: message.verb,
data: message.previous
}
} else if (message.verb === SOCKET_VERBS.ADDED_TO) {
return {
verb: message.verb,
data: message.data
}
} else {
return {
verb: 'unknown_verb',
data: message
}
}
}
});5 years ago
6 years ago