Skip to content

Instantly share code, notes, and snippets.

@laino
Created August 16, 2014 21:48
Show Gist options
  • Save laino/e4d753ae9bcf2c0136ca to your computer and use it in GitHub Desktop.
Save laino/e4d753ae9bcf2c0136ca to your computer and use it in GitHub Desktop.
Original Module File
var redis = require('../redis.js');
var filelist = require('../redis/filelist.js');
var jsonList = require('../redis/jsonList.js');
var keygen = require('../util/keygen.js');
var live = require('./live/room.js');
function getRoomExpiration(){
var expiration = redis.config.room_expiration_days * 24 * 60 * 60;
if(expiration < 24 * 60 * 60){
throw "Safety check failed, expiration less than one day!";
}
return expiration;
}
function generateRoomID(callback){
redis.client.INCR('room_id_counter', function(error, response){
if(error){
callback(error);
return;
}
var room_number = response | 0;
keygen.key({random:2, number:room_number, base64:true, shorten:true}, callback);
});
}
module.exports.createNewRoom = function(callback){
generateRoomID(function(error, room_id){
if(error) return callback(error);
keygen.key({random:12, base64:true}, function(error, secretToken){
if(error) return callback(error);
var room = { created_time:redis.util.TIME(),
name:'New Room',
secretToken: secretToken,
firstLoad: true,
premiumUntil: 0,
private: true};
redis.client.SET('room:'+room_id, JSON.stringify(room), 'EX', getRoomExpiration(), function(error){
callback(error, error ? null : room_id);
});
});
});
};
module.exports.updateRoomExpiration = function(room){
redis.client.EXPIRE('room:'+room, getRoomExpiration());
};
module.exports.getRoomInfo = function(id, callback){
redis.client.GET('room:'+id, function(error, response){
if(error){
callback(error);
return;
}
if(!response){
callback();
return;
}
callback(null, JSON.parse(response));
});
};
module.exports.exists = function(id, callback){
redis.client.EXISTS('room:'+id, function(error, exists){
callback(error, parseInt(exists) === 1);
});
};
module.exports.setRoomInfo = function(room_id, key, value, callback){
redis.util.setJSON('room:'+room_id, key, value, function(error){
if(!error){
live.emit(room_id, 'changed_info', {key:key, value:value});
}
if(callback) callback(error);
});
};
module.exports.incrRoomInfo = function(room_id, key, value, callback){
redis.util.incrJSON('room:'+room_id, key, value, callback);
};
module.exports.addFile = function(metadata, ttl, callback){
var options = {listTTL: getRoomExpiration()};
filelist.add(redis, metadata.room, metadata.id, metadata, ttl, options, callback);
};
module.exports.getFile = function(file_id, callback){
filelist.get(redis, 'none', file_id, callback);
};
module.exports.countFiles = function(room_id, callback){
filelist.count(redis, room_id, callback);
};
module.exports.emptyRoom = function(room_id, callback){
filelist.empty(redis, room_id, callback);
};
module.exports.unlink = function(room_id, callback){
redis.client.DEL('room:'+room_id, function(error){
if(error) return callback(error);
live.emit(room_id, 'removed');
callback();
});
};
module.exports.countUsers = function(room_id, callback){
var users = 0;
jsonList.each(redis, "room:"+room_id+":servers", function(server, callback){
if(server){
users += server.user_count;
}
callback();
}, function(error){
callback(error, users);
});
};
module.exports.deleteFile = function(room_id, file_id, callback){
filelist.remove(redis, room_id, file_id, callback);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment