Skip to content

Instantly share code, notes, and snippets.

@wesbos

wesbos/server.js Secret

Created September 13, 2012 18:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wesbos/ea6ae686bb64931032df to your computer and use it in GitHub Desktop.
Save wesbos/ea6ae686bb64931032df to your computer and use it in GitHub Desktop.
var fs = require('fs'),
nowjs = require("now"),
colors = require('colors'),
cradle = require('cradle'),
db = new(cradle.Connection)('wesbos.cloudant.com',{
auth: { username: 'wesbos', password: '---nope--' }
}).database('dentaleshare');
/*
Simple Node Server
*/
httpServer = require('http').createServer(function(req, response){
var file, ctype;
// console.log(req.url.green);
if (req.url.match(/[\w'-\/]*.js/gi)) {
file = req.url;
ctype = 'application/javascript';
}
else if (req.url.match(/[\w'-\/]*.css/gi)) {
file = req.url;
ctype = 'text/css';
}
else if (req.url.match(/[\w'-\/]*.jpg/gi)) {
file = req.url;
ctype = 'image/jpg';
}
else if (req.url.match(/[\w'-\/]*.js/gi)) {
file = '/index.html';
ctype = 'text/html';
}
else if (req.url.match(/[\w'-\/]*.png/gi)) {
file = '/index.html';
ctype = 'text/html';
}
else {
file = '/index.html';
ctype = 'text/html';
}
fs.readFile(__dirname+file, function(err, data){
response.writeHead(200, {'Content-Type': ctype });
response.write(data);
response.end();
});
}).listen(1234);
console.log("Listening on port 1234".green)
/* Start Now.js */
var everyone = nowjs.initialize(httpServer),
/* App namespace */
App = {
userList : function(that) {
var userList = nowjs.getGroup(that.now.room).getUsers(function(users){
var roomData = nowjs.getGroup(that.now.room),
userData = [],
i = 0;
for(var key in roomData.users) {
var user = roomData.users[key];
userData[i] = {};
userData[i]['name'] = user.scopeTable.data['now.user.name'];
userData[i]['color'] = user.scopeTable.data['now.user.color'];
i++;
}
console.log(userData);
nowjs.getGroup(that.now.room).now.updateUserList(userData);
});
}
};
nowjs.on('connect', function() {
// console.log(this.now);
console.log('Connected!'.green.inverse, this.now.user.name);
this.now.room = this.now.user.room;
this.now.user.clientId = this.user.clientId;
nowjs.getGroup(this.now.room).addUser(this.user.clientId);
console.log("Joined Room".yellow.inverse, this.now.room,"\n");
// update the userlist
App.userList(this);
// load the latest for this use
this.now.loadRemote();
});
nowjs.on('disconnect', function() {
console.log('Disconnected!'.red.inverse);
console.log(this.now.user.name);
// Update the userlist
App.userList(this);
});
everyone.now.distributeDraw = function(data) {
// Tell all the clients to draw pixels
// everyone.now.draw(data);
nowjs.getGroup(this.now.room).now.draw(data);
// console.log(this.now);
console.log(data.x,data.y,data.type);
};
everyone.now.distributeClearCanvas = function() {
// Clear everyone in the current room's canvas
console.log('clear canvas called on the server');
nowjs.getGroup(this.now.room).now.clearCanvas();
};
everyone.now.distributeText = function(data) {
nowjs.getGroup(this.now.room).now.applyText(data);
}
everyone.now.joinRoom = function() {
};
everyone.now.saveCurrentDrawing = function(base64Image) {
var room = nowjs.getGroup(this.now.room).groupName;
console.log("Going to save the drawing for room ",room);
db.save('drawing-room-'+room, {
image : base64Image
}, function (err, res) {
if (err) {
console.log('Error',err);
}
else {
console.log('Successfully saved!');
}
});
}
everyone.now.loadRemote = function() {
var room = nowjs.getGroup(this.now.room).groupName,
self = this,
clientId = this.now.user.clientId;
console.log("Going to get the drawing for room ",room);
db.get('drawing-room-'+room, function (err, doc) {
if (err) {
console.log('Error',err);
}
else {
console.log('sucess, lets send it to the client');
// console.log(doc.image);
// console.log(doc.image);
// pass back the data to the user who requested it
nowjs.getClient(clientId,function() {
this.now.drawRemote(doc.image);
});
return doc.image;
}
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment