Merge branch 'data-abstract'
this is ddunlops work to abstract data layer and allow for mongodb thanks ddunlop Conflicts: .gitignore server.js
This commit is contained in:
commit
d159d02390
6 changed files with 487 additions and 273 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,4 +1,5 @@
|
||||||
.DS_Store
|
.DS_Store
|
||||||
rsync.sh
|
rsync.sh
|
||||||
|
*.swp
|
||||||
*.log
|
*.log
|
||||||
.monitor
|
.monitor
|
13
config.js
Normal file
13
config.js
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
/*exports.database = {
|
||||||
|
type: 'mongodb',
|
||||||
|
hostname: 'localhost',
|
||||||
|
port: 27017,
|
||||||
|
database: 'scrumblr'
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
|
exports.database = {
|
||||||
|
type: 'redis',
|
||||||
|
prefix: '#scrumblr#'
|
||||||
|
};
|
||||||
|
|
39
lib/data.js
Normal file
39
lib/data.js
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
var conf = require('../config.js').database;
|
||||||
|
|
||||||
|
exports.db = require('./data/'+conf.type+'.js').db;
|
||||||
|
|
||||||
|
/*
|
||||||
|
var db = function(callback) { }
|
||||||
|
|
||||||
|
db.prototype = {
|
||||||
|
clearRoom: function(room, callback) { },
|
||||||
|
|
||||||
|
// theme commands
|
||||||
|
setTheme: function(room, theme) { },
|
||||||
|
|
||||||
|
getTheme: function(room, callback) { },
|
||||||
|
|
||||||
|
// Column commands
|
||||||
|
createColumn: function(room, name, callback) { },
|
||||||
|
|
||||||
|
getAllColumns: function(room, callback) { },
|
||||||
|
|
||||||
|
deleteColumn: function(room) { },
|
||||||
|
|
||||||
|
setColumns: function(room, columns) { },
|
||||||
|
|
||||||
|
// Card commands
|
||||||
|
createCard: function(room, id, card) { },
|
||||||
|
|
||||||
|
getAllCards: function(room, callback) { },
|
||||||
|
|
||||||
|
cardEdit: function(room, id, text) { },
|
||||||
|
|
||||||
|
cardSetXY: function(room, id, x, y) { },
|
||||||
|
|
||||||
|
deleteCard: function(room, id) { },
|
||||||
|
|
||||||
|
addSticker: function(room, cardId, stickerId) { }
|
||||||
|
};
|
||||||
|
exports.db = db;
|
||||||
|
*/
|
155
lib/data/mongodb.js
Normal file
155
lib/data/mongodb.js
Normal file
|
@ -0,0 +1,155 @@
|
||||||
|
var Db = require('mongodb').Db;
|
||||||
|
Server = require('mongodb').Server,
|
||||||
|
BSON = require('mongodb').BSONNative,
|
||||||
|
conf = require('../../config.js').database;
|
||||||
|
|
||||||
|
var db = function(callback)
|
||||||
|
{
|
||||||
|
this.rooms = false;
|
||||||
|
var t = this;
|
||||||
|
|
||||||
|
var db = new Db(conf.database, new Server(conf.hostname, conf.port), {native_parser:true});
|
||||||
|
db.open(function(err, db) {
|
||||||
|
db.collection('rooms', function(err, collection) {
|
||||||
|
// make sure we have an index on name
|
||||||
|
collection.ensureIndex([['name',1]],false,function() {});
|
||||||
|
t.rooms = collection;
|
||||||
|
});
|
||||||
|
callback();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
db.prototype = {
|
||||||
|
clearRoom: function(room, callback)
|
||||||
|
{
|
||||||
|
this.rooms.remove({name:room},callback);
|
||||||
|
},
|
||||||
|
|
||||||
|
// theme commands
|
||||||
|
setTheme: function(room, theme)
|
||||||
|
{
|
||||||
|
this.rooms.update(
|
||||||
|
{name:room},
|
||||||
|
{$set:{theme:theme}}
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
getTheme: function(room, callback)
|
||||||
|
{
|
||||||
|
this.rooms.findOne(
|
||||||
|
{name:room},
|
||||||
|
{theme:true},
|
||||||
|
function(err, room) {
|
||||||
|
if(room) {
|
||||||
|
callback(room.theme);
|
||||||
|
} else {
|
||||||
|
callback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
// Column commands
|
||||||
|
createColumn: function(room, name, callback)
|
||||||
|
{
|
||||||
|
this.rooms.update(
|
||||||
|
{name:room},
|
||||||
|
{$push:{columns:name}},
|
||||||
|
{upsert:true}
|
||||||
|
,callback
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
getAllColumns: function(room, callback)
|
||||||
|
{
|
||||||
|
this.rooms.findOne({name:room},{columns:true},function(err, room) {
|
||||||
|
if(room) {
|
||||||
|
callback(room.columns);
|
||||||
|
} else {
|
||||||
|
callback();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
deleteColumn: function(room)
|
||||||
|
{
|
||||||
|
this.rooms.update(
|
||||||
|
{name:room},
|
||||||
|
{$pop:{columns:1}}
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
setColumns: function(room, columns)
|
||||||
|
{
|
||||||
|
this.rooms.update(
|
||||||
|
{name:room},
|
||||||
|
{$set:{columns:columns}},
|
||||||
|
{upsert:true}
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
// Card commands
|
||||||
|
createCard: function(room, id, card)
|
||||||
|
{
|
||||||
|
var doc = {};
|
||||||
|
doc['cards.'+id] = card;
|
||||||
|
this.rooms.update(
|
||||||
|
{name:room},
|
||||||
|
{$set:doc},
|
||||||
|
{upsert:true}
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
getAllCards: function(room, callback)
|
||||||
|
{
|
||||||
|
this.rooms.findOne({name:room},{cards:true},function(err, room) {
|
||||||
|
if(room) {
|
||||||
|
callback(room.cards);
|
||||||
|
} else {
|
||||||
|
callback();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
cardEdit: function(room, id, text)
|
||||||
|
{
|
||||||
|
var doc = {};
|
||||||
|
doc['cards.'+id+'.text'] = text;
|
||||||
|
this.rooms.update(
|
||||||
|
{name:room},
|
||||||
|
{$set:doc}
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
cardSetXY: function(room, id, x, y)
|
||||||
|
{
|
||||||
|
var doc = {};
|
||||||
|
doc['cards.'+id+'.x'] = x;
|
||||||
|
doc['cards.'+id+'.y'] = y;
|
||||||
|
this.rooms.update(
|
||||||
|
{name:room},
|
||||||
|
{$set:doc}
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
deleteCard: function(room, id)
|
||||||
|
{
|
||||||
|
var doc = {};
|
||||||
|
doc['cards.'+id] = true;
|
||||||
|
this.rooms.update(
|
||||||
|
{name:room},
|
||||||
|
{$unset:doc}
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
addSticker: function(room, cardId, stickerId)
|
||||||
|
{
|
||||||
|
var doc = {};
|
||||||
|
doc['cards.'+cardId+'.sticker'] = stickerId;
|
||||||
|
this.rooms.update(
|
||||||
|
{name:room},
|
||||||
|
{$set:doc}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.db = db;
|
154
lib/data/redis.js
Normal file
154
lib/data/redis.js
Normal file
|
@ -0,0 +1,154 @@
|
||||||
|
//var conf = require('../../config.js').database;
|
||||||
|
|
||||||
|
var redis = require("redis"),
|
||||||
|
redisClient = null; //redis.createClient();
|
||||||
|
|
||||||
|
var async = require("async");
|
||||||
|
|
||||||
|
// If you want Memory Store instead...
|
||||||
|
// var MemoryStore = require('connect/middleware/session/memory');
|
||||||
|
// var session_store = new MemoryStore();
|
||||||
|
|
||||||
|
var RedisStore = require('connect-redis');
|
||||||
|
var session_store = new RedisStore( );
|
||||||
|
|
||||||
|
var REDIS_PREFIX = '#scrumblr#';
|
||||||
|
|
||||||
|
//For Redis Debugging
|
||||||
|
|
||||||
|
|
||||||
|
var db = function(callback) {
|
||||||
|
redisClient = redis.createClient();
|
||||||
|
redisClient.on("connect", function (err) {
|
||||||
|
callback();
|
||||||
|
});
|
||||||
|
|
||||||
|
redisClient.on("error", function (err) {
|
||||||
|
console.log("Redis error: " + err);
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
db.prototype = {
|
||||||
|
clearRoom: function(room, callback) {
|
||||||
|
redisClient.del(REDIS_PREFIX + '-room:/demo-cards', function (err, res) {
|
||||||
|
redisClient.del(REDIS_PREFIX + '-room:/demo-columns', function (err, res) {
|
||||||
|
callback();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
// theme commands
|
||||||
|
setTheme: function(room, theme) {
|
||||||
|
redisClient.set(REDIS_PREFIX + '-room:' + room + '-theme', theme);
|
||||||
|
},
|
||||||
|
|
||||||
|
getTheme: function(room, callback) {
|
||||||
|
redisClient.get(REDIS_PREFIX + '-room:' + room + '-theme', function (err, res) {
|
||||||
|
callback(res);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
// Column commands
|
||||||
|
createColumn: function(room, name, callback) {
|
||||||
|
redisClient.rpush(REDIS_PREFIX + '-room:' + room + '-columns', name,
|
||||||
|
function (err, res) {
|
||||||
|
if (typeof callback != "undefined" && callback !== null) callback();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
getAllColumns: function(room, callback) {
|
||||||
|
redisClient.lrange(REDIS_PREFIX + '-room:' + room + '-columns', 0, -1, function(err, res) {
|
||||||
|
callback(res);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
deleteColumn: function(room) {
|
||||||
|
redisClient.rpop(REDIS_PREFIX + '-room:' + room + '-columns');
|
||||||
|
},
|
||||||
|
|
||||||
|
setColumns: function(room, columns) {
|
||||||
|
//1. first delete all columns
|
||||||
|
redisClient.del(REDIS_PREFIX + '-room:' + room + '-columns', function () {
|
||||||
|
//2. now add columns for each thingy
|
||||||
|
async.forEachSeries(
|
||||||
|
columns,
|
||||||
|
function( item, callback ) {
|
||||||
|
//console.log('rpush: ' + REDIS_PREFIX + '-room:' + room + '-columns' + ' -- ' + item);
|
||||||
|
redisClient.rpush(REDIS_PREFIX + '-room:' + room + '-columns', item,
|
||||||
|
function (err, res) {
|
||||||
|
callback();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
},
|
||||||
|
function() {
|
||||||
|
//this happens when the series is complete
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
// Card commands
|
||||||
|
createCard: function(room, id, card) {
|
||||||
|
var cardString = JSON.stringify(card);
|
||||||
|
redisClient.hset(
|
||||||
|
REDIS_PREFIX + '-room:' + room + '-cards',
|
||||||
|
id,
|
||||||
|
cardString
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
getAllCards: function(room, callback) {
|
||||||
|
redisClient.hgetall(REDIS_PREFIX + '-room:' + room + '-cards', function (err, res) {
|
||||||
|
|
||||||
|
var cards = [];
|
||||||
|
|
||||||
|
for (i in res) {
|
||||||
|
cards.push( JSON.parse(res[i]) );
|
||||||
|
}
|
||||||
|
console.dir(cards);
|
||||||
|
|
||||||
|
callback(cards);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
cardEdit: function(room, id, text) {
|
||||||
|
redisClient.hget(REDIS_PREFIX + '-room:' + room + '-cards', id, function(err, res) {
|
||||||
|
var card = JSON.parse(res);
|
||||||
|
if (card !== null) {
|
||||||
|
card.text = text;
|
||||||
|
redisClient.hset(REDIS_PREFIX + '-room:' + room + '-cards', id, JSON.stringify(card));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
cardSetXY: function(room, id, x, y) {
|
||||||
|
redisClient.hget(REDIS_PREFIX + '-room:' + room + '-cards', id, function(err, res) {
|
||||||
|
var card = JSON.parse(res);
|
||||||
|
if (card !== null) {
|
||||||
|
card.x = x;
|
||||||
|
card.y = y;
|
||||||
|
redisClient.hset(REDIS_PREFIX + '-room:' + room + '-cards', id, JSON.stringify(card));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
deleteCard: function(room, id) {
|
||||||
|
redisClient.hdel(
|
||||||
|
REDIS_PREFIX + '-room:' + room + '-cards',
|
||||||
|
id
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
addSticker: function(room, cardId, stickerId) {
|
||||||
|
redisClient.hget(REDIS_PREFIX + '-room:' + room + '-cards', cardId, function(err, res) {
|
||||||
|
var card = JSON.parse(res);
|
||||||
|
if (card !== null) {
|
||||||
|
card.sticker = stickerId;
|
||||||
|
redisClient.hset(REDIS_PREFIX + '-room:' + room + '-cards', cardId, JSON.stringify(card));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
exports.db = db;
|
216
server.js
216
server.js
|
@ -3,9 +3,6 @@ var http = require('http'),
|
||||||
express = require('express'),
|
express = require('express'),
|
||||||
connect = require('connect');
|
connect = require('connect');
|
||||||
|
|
||||||
var redis = require("redis"),
|
|
||||||
redisClient = redis.createClient();
|
|
||||||
|
|
||||||
var sys = require('sys');
|
var sys = require('sys');
|
||||||
|
|
||||||
var app = express.createServer();
|
var app = express.createServer();
|
||||||
|
@ -13,21 +10,13 @@ var app = express.createServer();
|
||||||
var async = require('async');
|
var async = require('async');
|
||||||
|
|
||||||
var rooms = require('./lib/rooms.js');
|
var rooms = require('./lib/rooms.js');
|
||||||
|
var data = require('./lib/data.js').db;
|
||||||
|
|
||||||
var sanitizer = require('sanitizer');
|
var sanitizer = require('sanitizer');
|
||||||
|
|
||||||
// If you want Memory Store instead...
|
|
||||||
// var MemoryStore = require('connect/middleware/session/memory');
|
|
||||||
// var session_store = new MemoryStore();
|
|
||||||
|
|
||||||
var RedisStore = require('connect-redis');
|
|
||||||
var session_store = new RedisStore( );
|
|
||||||
|
|
||||||
//Map of sids to user_names
|
//Map of sids to user_names
|
||||||
var sids_to_user_names = [];
|
var sids_to_user_names = [];
|
||||||
|
|
||||||
var REDIS_PREFIX = '#scrumscrum#';
|
|
||||||
|
|
||||||
app.configure( function(){
|
app.configure( function(){
|
||||||
app.use(express.static(__dirname + '/client'));
|
app.use(express.static(__dirname + '/client'));
|
||||||
app.use(express.bodyParser());
|
app.use(express.bodyParser());
|
||||||
|
@ -39,7 +28,7 @@ app.configure( function(){
|
||||||
express.session({
|
express.session({
|
||||||
key: "scrumscrum-cookie",
|
key: "scrumscrum-cookie",
|
||||||
secret: "kookoorikoo",
|
secret: "kookoorikoo",
|
||||||
store: session_store,
|
// store: session_store,
|
||||||
cookie: { path: '/', httpOnly: true, maxAge: 14400000 }
|
cookie: { path: '/', httpOnly: true, maxAge: 14400000 }
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
@ -47,13 +36,6 @@ app.configure( function(){
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
//For Redis Debugging
|
|
||||||
redisClient.on("error", function (err) {
|
|
||||||
console.log("Redis error: " + err);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
app.get('/', function(req, res) {
|
app.get('/', function(req, res) {
|
||||||
res.render('home.jade', {
|
res.render('home.jade', {
|
||||||
layout: false
|
layout: false
|
||||||
|
@ -166,7 +148,7 @@ function scrub( text ) {
|
||||||
// console.log(JSON.stringify(message.data));
|
// console.log(JSON.stringify(message.data));
|
||||||
|
|
||||||
getRoom(client, function(room) {
|
getRoom(client, function(room) {
|
||||||
cardSetXY( room , message.data.id, message.data.position.left, message.data.position.top)
|
db.cardSetXY( room , message.data.id, message.data.position.left, message.data.position.top)
|
||||||
});
|
});
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -200,9 +182,9 @@ function scrub( text ) {
|
||||||
clean_data.value = scrub(message.data.value);
|
clean_data.value = scrub(message.data.value);
|
||||||
clean_data.id = scrub(message.data.id);
|
clean_data.id = scrub(message.data.id);
|
||||||
|
|
||||||
//send update to Redis
|
//send update to database
|
||||||
getRoom(client, function(room) {
|
getRoom(client, function(room) {
|
||||||
cardEdit( room , clean_data.id, clean_data.value );
|
db.cardEdit( room , clean_data.id, clean_data.value );
|
||||||
});
|
});
|
||||||
|
|
||||||
var message_out = {
|
var message_out = {
|
||||||
|
@ -222,7 +204,7 @@ function scrub( text ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
getRoom( client, function(room) {
|
getRoom( client, function(room) {
|
||||||
deleteCard ( room, clean_message.data.id );
|
db.deleteCard ( room, clean_message.data.id );
|
||||||
});
|
});
|
||||||
|
|
||||||
//report to all other browsers
|
//report to all other browsers
|
||||||
|
@ -234,7 +216,7 @@ function scrub( text ) {
|
||||||
var clean_message = { data: scrub(message.data) };
|
var clean_message = { data: scrub(message.data) };
|
||||||
|
|
||||||
getRoom( client, function(room) {
|
getRoom( client, function(room) {
|
||||||
createColumn( room, clean_message.data, function() {} );
|
db.createColumn( room, clean_message.data, function() {} );
|
||||||
});
|
});
|
||||||
|
|
||||||
broadcastToRoom( client, clean_message );
|
broadcastToRoom( client, clean_message );
|
||||||
|
@ -243,7 +225,7 @@ function scrub( text ) {
|
||||||
|
|
||||||
case 'deleteColumn':
|
case 'deleteColumn':
|
||||||
getRoom( client, function(room) {
|
getRoom( client, function(room) {
|
||||||
deleteColumn();
|
db.deleteColumn(room);
|
||||||
});
|
});
|
||||||
broadcastToRoom( client, { action: 'deleteColumn' } );
|
broadcastToRoom( client, { action: 'deleteColumn' } );
|
||||||
|
|
||||||
|
@ -262,7 +244,7 @@ function scrub( text ) {
|
||||||
clean_columns[i] = scrub( columns[i] );
|
clean_columns[i] = scrub( columns[i] );
|
||||||
}
|
}
|
||||||
|
|
||||||
setColumns( room, clean_columns );
|
db.setColumns( room, clean_columns );
|
||||||
|
|
||||||
broadcastToRoom( client, { action: 'updateColumns', data: clean_columns } );
|
broadcastToRoom( client, { action: 'updateColumns', data: clean_columns } );
|
||||||
|
|
||||||
|
@ -273,7 +255,7 @@ function scrub( text ) {
|
||||||
clean_message.data = scrub(message.data);
|
clean_message.data = scrub(message.data);
|
||||||
|
|
||||||
getRoom( client, function(room) {
|
getRoom( client, function(room) {
|
||||||
setTheme( room, clean_message.data );
|
db.setTheme( room, clean_message.data );
|
||||||
});
|
});
|
||||||
|
|
||||||
clean_message.action = 'changeTheme';
|
clean_message.action = 'changeTheme';
|
||||||
|
@ -299,10 +281,11 @@ function scrub( text ) {
|
||||||
var stickerId = scrub(message.data.stickerId);
|
var stickerId = scrub(message.data.stickerId);
|
||||||
|
|
||||||
getRoom(client, function(room) {
|
getRoom(client, function(room) {
|
||||||
addSticker( room , cardId, stickerId );
|
db.addSticker( room , cardId, stickerId );
|
||||||
});
|
});
|
||||||
|
|
||||||
broadcastToRoom( client, { action: 'addSticker', data: { cardId: cardId, stickerId: stickerId }});
|
broadcastToRoom( client, { action: 'addSticker', data: { cardId: cardId, stickerId: stickerId }});
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
console.log('unknown action');
|
console.log('unknown action');
|
||||||
|
@ -329,8 +312,7 @@ function initClient ( client )
|
||||||
//console.log ('initClient Started');
|
//console.log ('initClient Started');
|
||||||
getRoom(client, function(room) {
|
getRoom(client, function(room) {
|
||||||
|
|
||||||
|
db.getAllCards( room , function (cards) {
|
||||||
getAllCards( room , function (cards) {
|
|
||||||
|
|
||||||
client.send(
|
client.send(
|
||||||
{
|
{
|
||||||
|
@ -342,7 +324,7 @@ function initClient ( client )
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
getAllColumns ( room, function (columns) {
|
db.getAllColumns ( room, function (columns) {
|
||||||
client.send(
|
client.send(
|
||||||
{
|
{
|
||||||
action: 'initColumns',
|
action: 'initColumns',
|
||||||
|
@ -352,7 +334,7 @@ function initClient ( client )
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
getTheme( room, function(theme) {
|
db.getTheme( room, function(theme) {
|
||||||
|
|
||||||
if (theme == null) theme = 'bigcards';
|
if (theme == null) theme = 'bigcards';
|
||||||
|
|
||||||
|
@ -417,65 +399,8 @@ function broadcastToRoom ( client, message ) {
|
||||||
rooms.broadcast_to_roommates(client, message);
|
rooms.broadcast_to_roommates(client, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getTheme ( room , callbackFunction )
|
|
||||||
{
|
|
||||||
redisClient.get(REDIS_PREFIX + '-room:' + room + '-theme', function (err, res) {
|
|
||||||
callbackFunction(res);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function setTheme ( room, theme )
|
|
||||||
{
|
|
||||||
redisClient.set(REDIS_PREFIX + '-room:' + room + '-theme', theme);
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------COL FUNCTIONS
|
|
||||||
function getAllColumns ( room, callbackFunction ) {
|
|
||||||
redisClient.lrange(REDIS_PREFIX + '-room:' + room + '-columns', 0, -1, function(err, res) {
|
|
||||||
callbackFunction(res);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function createColumn ( room, name, callback ) {
|
|
||||||
console.log('rpush: ' + REDIS_PREFIX + '-room:' + room + '-columns' + " -- " + name);
|
|
||||||
redisClient.rpush(REDIS_PREFIX + '-room:' + room + '-columns', name,
|
|
||||||
function (err, res) {
|
|
||||||
if (typeof callback != "undefined" && callback !== null) callback();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function deleteColumn ( room ) {
|
|
||||||
redisClient.rpop(REDIS_PREFIX + '-room:' + room + '-columns');
|
|
||||||
}
|
|
||||||
|
|
||||||
function setColumns ( room, columns ) {
|
|
||||||
console.dir('SetColumns:');
|
|
||||||
console.dir(columns);
|
|
||||||
|
|
||||||
//1. first delete all columns
|
|
||||||
redisClient.del(REDIS_PREFIX + '-room:' + room + '-columns', function () {
|
|
||||||
//2. now add columns for each thingy
|
|
||||||
async.forEachSeries(
|
|
||||||
columns,
|
|
||||||
function( item, callback ) {
|
|
||||||
//console.log('rpush: ' + REDIS_PREFIX + '-room:' + room + '-columns' + ' -- ' + item);
|
|
||||||
redisClient.rpush(REDIS_PREFIX + '-room:' + room + '-columns', item,
|
|
||||||
function (err, res) {
|
|
||||||
callback();
|
|
||||||
});
|
|
||||||
},
|
|
||||||
function() {
|
|
||||||
//this happens when the series is complete
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//----------------CARD FUNCTIONS
|
//----------------CARD FUNCTIONS
|
||||||
function createCard( room, id, text, x, y, rot, colour ) {
|
function createCard( room, id, text, x, y, rot, colour ) {
|
||||||
//console.log ('create card in ' + room);
|
|
||||||
var card = {
|
var card = {
|
||||||
id: id,
|
id: id,
|
||||||
colour: colour,
|
colour: colour,
|
||||||
|
@ -483,81 +408,10 @@ function createCard( room, id, text, x, y, rot, colour ) {
|
||||||
x: x,
|
x: x,
|
||||||
y: y,
|
y: y,
|
||||||
text: text,
|
text: text,
|
||||||
stickerId: null
|
sticker: null
|
||||||
};
|
};
|
||||||
|
|
||||||
var cardString = JSON.stringify(card);
|
db.createCard(room, id, card);
|
||||||
|
|
||||||
redisClient.hset(
|
|
||||||
REDIS_PREFIX + '-room:' + room + '-cards',
|
|
||||||
id,
|
|
||||||
cardString
|
|
||||||
)
|
|
||||||
|
|
||||||
//console.log(JSON.stringify(cards));
|
|
||||||
}
|
|
||||||
|
|
||||||
function cardSetXY( room, id, x, y )
|
|
||||||
{
|
|
||||||
redisClient.hget(REDIS_PREFIX + '-room:' + room + '-cards', id, function(err, res) {
|
|
||||||
var card = JSON.parse(res);
|
|
||||||
if (card !== null)
|
|
||||||
{
|
|
||||||
card.x = x;
|
|
||||||
card.y = y;
|
|
||||||
redisClient.hset(REDIS_PREFIX + '-room:' + room + '-cards', id, JSON.stringify(card));
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function cardEdit( room , id, text) {
|
|
||||||
redisClient.hget(REDIS_PREFIX + '-room:' + room + '-cards', id, function(err, res) {
|
|
||||||
var card = JSON.parse(res);
|
|
||||||
if (card !== null)
|
|
||||||
{
|
|
||||||
card.text = text;
|
|
||||||
redisClient.hset(REDIS_PREFIX + '-room:' + room + '-cards', id, JSON.stringify(card));
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function deleteCard( room, id ) {
|
|
||||||
//console.log('deletecard in redis: ' + id);
|
|
||||||
redisClient.hdel(
|
|
||||||
REDIS_PREFIX + '-room:' + room + '-cards',
|
|
||||||
id
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
function getAllCards( room, callbackFunction ) {
|
|
||||||
console.log('getall from: ' + REDIS_PREFIX + '-room' + room + '-cards');
|
|
||||||
redisClient.hgetall(REDIS_PREFIX + '-room:' + room + '-cards', function (err, res) {
|
|
||||||
|
|
||||||
var cards = Array();
|
|
||||||
|
|
||||||
for (i in res)
|
|
||||||
{
|
|
||||||
cards.push( JSON.parse(res[i]) );
|
|
||||||
}
|
|
||||||
console.dir(cards);
|
|
||||||
|
|
||||||
|
|
||||||
callbackFunction (cards);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function addSticker( room, cardId, stickerId ) {
|
|
||||||
redisClient.hget(REDIS_PREFIX + '-room:' + room + '-cards', cardId, function(err, res) {
|
|
||||||
var card = JSON.parse(res);
|
|
||||||
if (card !== null)
|
|
||||||
{
|
|
||||||
card.sticker = stickerId;
|
|
||||||
redisClient.hset(REDIS_PREFIX + '-room:' + room + '-cards', cardId, JSON.stringify(card));
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function roundRand( max )
|
function roundRand( max )
|
||||||
|
@ -585,35 +439,33 @@ function setUserName ( client, name )
|
||||||
console.dir(sids_to_user_names);
|
console.dir(sids_to_user_names);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function cleanAndInitializeDemoRoom()
|
function cleanAndInitializeDemoRoom()
|
||||||
{
|
{
|
||||||
// DUMMY DATA
|
// DUMMY DATA
|
||||||
redisClient.del(REDIS_PREFIX + '-room:/demo-cards', function (err, res) {
|
db.clearRoom('/demo', function() {
|
||||||
redisClient.del(REDIS_PREFIX + '-room:/demo-columns', function (err, res) {
|
db.createColumn( '/demo', 'Not Started' );
|
||||||
createColumn( '/demo', 'Not Started' );
|
db.createColumn( '/demo', 'Started' );
|
||||||
createColumn( '/demo', 'Started' );
|
db.createColumn( '/demo', 'Testing' );
|
||||||
createColumn( '/demo', 'Testing' );
|
db.createColumn( '/demo', 'Review' );
|
||||||
createColumn( '/demo', 'Review' );
|
db.createColumn( '/demo', 'Complete' );
|
||||||
createColumn( '/demo', 'Complete' );
|
|
||||||
|
|
||||||
|
|
||||||
createCard('/demo', 'card1', 'Hello this is fun', roundRand(600), roundRand(300), Math.random() * 10 - 5, 'yellow');
|
createCard('/demo', 'card1', 'Hello this is fun', roundRand(600), roundRand(300), Math.random() * 10 - 5, 'yellow');
|
||||||
createCard('/demo', 'card2', 'Hello this is a new story.', roundRand(600), roundRand(300), Math.random() * 10 - 5, 'white');
|
createCard('/demo', 'card2', 'Hello this is a new story.', roundRand(600), roundRand(300), Math.random() * 10 - 5, 'white');
|
||||||
createCard('/demo', 'card3', '.', roundRand(600), roundRand(300), Math.random() * 10 - 5, 'blue');
|
createCard('/demo', 'card3', '.', roundRand(600), roundRand(300), Math.random() * 10 - 5, 'blue');
|
||||||
createCard('/demo', 'card4', '.', roundRand(600), roundRand(300), Math.random() * 10 - 5, 'green');
|
createCard('/demo', 'card4', '.', roundRand(600), roundRand(300), Math.random() * 10 - 5, 'green');
|
||||||
|
|
||||||
createCard('/demo', 'card5', 'Hello this is fun', roundRand(600), roundRand(300), Math.random() * 10 - 5, 'yellow');
|
createCard('/demo', 'card5', 'Hello this is fun', roundRand(600), roundRand(300), Math.random() * 10 - 5, 'yellow');
|
||||||
createCard('/demo', 'card6', 'Hello this is a new card.', roundRand(600), roundRand(300), Math.random() * 10 - 5, 'yellow');
|
createCard('/demo', 'card6', 'Hello this is a new card.', roundRand(600), roundRand(300), Math.random() * 10 - 5, 'yellow');
|
||||||
createCard('/demo', 'card7', '.', roundRand(600), roundRand(300), Math.random() * 10 - 5, 'blue');
|
createCard('/demo', 'card7', '.', roundRand(600), roundRand(300), Math.random() * 10 - 5, 'blue');
|
||||||
createCard('/demo', 'card8', '.', roundRand(600), roundRand(300), Math.random() * 10 - 5, 'green');
|
createCard('/demo', 'card8', '.', roundRand(600), roundRand(300), Math.random() * 10 - 5, 'green');
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
|
|
||||||
|
var db = new data(function() {
|
||||||
cleanAndInitializeDemoRoom();
|
cleanAndInitializeDemoRoom();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue