Skip to content

Commit

Permalink
Merge pull request #81 from nkzawa/patch-2
Browse files Browse the repository at this point in the history
Fix an error and changes according to adapter's Room class
  • Loading branch information
rauchg committed Dec 7, 2015
2 parents 1cf6ce8 + c8a7be3 commit 4fc675c
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 28 deletions.
34 changes: 9 additions & 25 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -147,10 +147,7 @@ function adapter(uri, opts){
Redis.prototype.add = function(id, room, fn){
debug('adding %s to %s ', id, room);
var self = this;
this.sids[id] = this.sids[id] || {};
this.sids[id][room] = true;
this.rooms[room] = this.rooms[room] || {};
this.rooms[room][id] = true;
Adapter.prototype.add.call(this, id, room);
var channel = prefix + '#' + this.nsp.name + '#' + room + '#';
sub.subscribe(channel, function(err){
if (err) {
Expand All @@ -175,13 +172,10 @@ function adapter(uri, opts){
debug('removing %s from %s', id, room);

var self = this;
this.sids[id] = this.sids[id] || {};
this.rooms[room] = this.rooms[room] || {};
delete this.sids[id][room];
delete this.rooms[room][id];
var hasRoom = this.rooms.hasOwnProperty(room);
Adapter.prototype.del.call(this, id, room);

if (this.rooms.hasOwnProperty(room) && !Object.keys(this.rooms[room]).length) {
delete this.rooms[room];
if (hasRoom && !this.rooms[room]) {
var channel = prefix + '#' + this.nsp.name + '#' + room + '#';
sub.unsubscribe(channel, function(err){
if (err) {
Expand Down Expand Up @@ -210,23 +204,13 @@ function adapter(uri, opts){
var self = this;
var rooms = this.sids[id];

if (!rooms) return process.nextTick(fn.bind(null, null));
if (!rooms) {
if (fn) process.nextTick(fn.bind(null, null));
return;
}

async.forEach(Object.keys(rooms), function(room, next){
if (rooms.hasOwnProperty(room)) {
delete self.rooms[room][id];
}

if (self.rooms.hasOwnProperty(room) && !Object.keys(self.rooms[room]).length) {
delete self.rooms[room];
var channel = prefix + '#' + self.nsp.name + '#' + room + '#';
return sub.unsubscribe(channel, function(err){
if (err) return self.emit('error', err);
next();
});
} else {
process.nextTick(next);
}
self.del(id, room, next);
}, function(err){
if (err) {
self.emit('error', err);
Expand Down
6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@
"debug": "2.2.0",
"msgpack-js": "0.3.0",
"redis": "2.3.0",
"socket.io-adapter": "automattic/socket.io-adapter#de5cba",
"socket.io-adapter": "0.4.0",
"uid2": "0.0.3"
},
"devDependencies": {
"socket.io": "1.0.2",
"socket.io-client": "1.0.2",
"socket.io": "socketio/socket.io",
"socket.io-client": "socketio/socket.io-client",
"mocha": "1.18.0",
"expect.js": "0.3.1"
}
Expand Down
54 changes: 54 additions & 0 deletions test/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ describe('socket.io-redis', function(){
client1.on('woot', function(a, b){
expect(a).to.eql([]);
expect(b).to.eql({ a: 'b' });
client1.disconnect();
client2.disconnect();
done();
});
server2.on('connection', function(c2){
Expand Down Expand Up @@ -44,6 +46,9 @@ describe('socket.io-redis', function(){
});

client1.on('broadcast', function(){
client1.disconnect();
client2.disconnect();
client3.disconnect();
setTimeout(done, 100);
});

Expand All @@ -59,6 +64,55 @@ describe('socket.io-redis', function(){
});
});

it('doesn\'t broadcast to left rooms', function(done){
create(function(server1, client1){
create(function(server2, client2){
create(function(server3, client3){
server1.on('connection', function(c1){
c1.join('woot');
c1.leave('woot');
});

server2.on('connection', function(c2){
c2.on('do broadcast', function(){
c2.broadcast.to('woot').emit('broadcast');

setTimeout(function() {
client1.disconnect();
client2.disconnect();
client3.disconnect();
done();
}, 100);
});
});

server3.on('connection', function(c3){
client2.emit('do broadcast');
});

client1.on('broadcast', function(){
throw new Error('Not in room');
});
});
});
});
});

it('deletes rooms upon disconnection', function(done){
create(function(server, client){
server.on('connection', function(c){
c.join('woot');
c.on('disconnect', function() {
expect(c.adapter.sids[c.id]).to.be.empty();
expect(c.adapter.rooms).to.be.empty();
client.disconnect();
done();
});
c.disconnect();
});
});
});

// create a pair of socket.io server+client
function create(nsp, fn){
var srv = http();
Expand Down

0 comments on commit 4fc675c

Please sign in to comment.