-
-
Save wesbos/ea6ae686bb64931032df to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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