From 1f3575fe0ba427ce406208b7323d44db2cb5cac4 Mon Sep 17 00:00:00 2001 From: Austin King Date: Fri, 18 Jan 2013 13:27:46 -0800 Subject: [PATCH] Notes into the stream, when a user enters the room Adds a log level for Socket.io to config --- client/js/rooms.js | 20 +++++++++- server/etc/config.js-dist | 7 ++++ server/lib/db.js | 34 +++++++--------- server/routes.js | 6 --- server/sockets.js | 63 ++++++++++++++++++++---------- server/views/layout.html | 1 - server/views/room.html | 6 ++- server/views/widget/templates.html | 12 ++++++ 8 files changed, 98 insertions(+), 51 deletions(-) diff --git a/client/js/rooms.js b/client/js/rooms.js index 31caf28..eef6168 100644 --- a/client/js/rooms.js +++ b/client/js/rooms.js @@ -62,6 +62,13 @@ window.connect = function (audience, roomId) { else $('#stream ol').append(h); }; + + var renderNewUser = function (profile) { + profile.date = (new Date()).toISOString(); + var h = _.template($("#new_user_template").html())(profile); + $('#stream ol').prepend(h); + }; + socket.on('post message', function (data) { if (! knownEmails[currentUser]) { knownEmails[currentUser] = true; @@ -70,15 +77,24 @@ window.connect = function (audience, roomId) { knownEmails[data.email] = true; $('#members').load('/widgets/members/' + roomId); } - console.log(data); renderMessage(data); //window.scrollTo(0, 1000000); }); + socket.on('new user', function (profile) { + renderNewUser(profile); + }); socket.on('sync update', function (data) { console.log('SYNC UPDATE', data); for (var i=0; i < data.events.length; i++) { - renderMessage(data.events[i]); console.log(i, data.events[i]); + try { + var event = JSON.parse(data.events[i].message); + if (event.name) renderNewUser(event); + } catch (e) { + console.log(e); + // TODO Unify POST are a string, while NEW USER are JSON + renderMessage(data.events[i]); + } } }); diff --git a/server/etc/config.js-dist b/server/etc/config.js-dist index 8e1727b..531d7bf 100644 --- a/server/etc/config.js-dist +++ b/server/etc/config.js-dist @@ -11,3 +11,10 @@ exports.mysqlPort = 3306; exports.mysqlUser = "user"; exports.mysqlPassword = "password"; exports.mysqlDBName = "dev_roomr"; + +// Log Level +exports.DEBUG = 3; +exports.INFO = 2; +exports.WARN = 1; +exports.DEBUG = 0; +exports.logLevel = 1; \ No newline at end of file diff --git a/server/lib/db.js b/server/lib/db.js index 2dac328..e6a04aa 100644 --- a/server/lib/db.js +++ b/server/lib/db.js @@ -66,12 +66,9 @@ exports.createRoom = function (email, roomName, cb) { finCb(); return cb (err); } - exports.addMemberToRoom(email, roomId, function (err) { - if (err) { - return cb(err); - } - return cb(null, roomId); - }, conn, finCb); + finCb(); + return cb(null, roomId); + }); }); @@ -85,10 +82,10 @@ exports.addMemberToRoom = function (email, roomId, cb, conn, finCb) { if (err) { console.error('Error adding member to room' + err); _finCb(); - return cb(err); + return cb(err, false); } _finCb(); - cb(null); + cb(null, res.affectedRows > 0); }); }; if (! conn) { @@ -238,16 +235,15 @@ exports.addEvent = function (roomId, email, type, value, cb) { return cb(err); } var insertCb = function (err, res) { + finCb(); if (err) { console.error(err); - finCb(); - cb(err); + cb(err); } else { return cb(null, res.insertId); - finCb(); } }; - + conn.query('INSERT INTO events (rooms_id, member_email, etype, evalue) ' + 'VALUES (?, ?, ?, ?)', [roomId, email, type, value], insertCb); }); @@ -264,20 +260,18 @@ exports.syncEvents = function (roomId, email, lastId, cb) { return cb(err); } var selectCb = function (err, res) { + finCb(); if (err) { console.error(err); - finCb(); - cb(err); + cb(err); } else { var sync = { roomId: roomId, events: []}; for (var i=0; i < res.length; i++) { - // db column type is blob... - res[i].message = new Buffer(res[i].message, 'utf8').toString(); - sync.events.push(res[i]); - } - + // db column type is blob... + res[i].message = new Buffer(res[i].message, 'utf8').toString(); + sync.events.push(res[i]); + } return cb(null, sync); - finCb(); } }; conn.query(sel, [roomId, email, roomId, lastId], selectCb); diff --git a/server/routes.js b/server/routes.js index ee7ba85..46f7f34 100644 --- a/server/routes.js +++ b/server/routes.js @@ -63,12 +63,6 @@ app.get('/r/:roomUrl', function (req, res) { } else if (! room.room.name) { return res.render('unknown_room.html'); } else { - db.addMemberToRoom(req.session.email, roomId, function (err) { - if (err) console.error('Unable to add user to room ' + err); - }); - console.log('room ='); - console.log(room); - return res.render('room.html', { audience: config.audience, room: room.room, diff --git a/server/sockets.js b/server/sockets.js index cd2ab92..332f58d 100644 --- a/server/sockets.js +++ b/server/sockets.js @@ -1,4 +1,5 @@ -var cookieReader = require('./lib/client_sessions_cookie_reader'), +var config = require('./etc/config'), + cookieReader = require('./lib/client_sessions_cookie_reader'), crypto = require('crypto'), db = require('./lib/db'), socket_io = require('socket.io'); @@ -13,6 +14,7 @@ exports.setup = function (app) { var io = socket_io.listen(app); io.configure(function () { + io.set('log level', config.logLevel); io.set('authorization', function (handshakeData, cb) { cookieReader(handshakeData.headers.cookie, function (err, session) { console.log('SESSION=', session); @@ -42,9 +44,28 @@ exports.setup = function (app) { */ socket.on('subscribe room', function (data) { - console.log('== SIO subscribe room ' + data.roomId); - // checkMemberOfRoom(data.roomId, function (err, isMember) {}) - socket.join(data.roomId); + var email = socket.handshake.email; + socket.join(data.roomId); + // checkMemberOfRoom(data.roomId, function (err, isMember) {}) + db.addMemberToRoom(email, data.roomId, function (err, newUser) { + if (err) { + console.error(err); + } + if (newUser) { + db.getProfile(email, function (err, profile) { + profile.avatar40 = avatar(email, 40); + db.addEvent(data.roomId, email, 'NEWUSER', JSON.stringify(profile), function (err, eventId) { + if (err) { + console.log('ERROR saving post room event'); + console.log(err); + } else { + profile.event_id = eventId; + io.sockets.in(data.roomId).emit('new user', profile); + } + }); + }); + } + }); }); /** @@ -53,38 +74,38 @@ exports.setup = function (app) { socket.on('sync room', function (data) { console.log('== SIO sync room ' + data.roomId + ' ' + data.eventId); // checkMemberOfRoom(data.roomId, function (err, isMember) {}) - db.syncEvents(data.roomId, socket.handshake.email, data.eventId, function (err, syncData) { - if (err) { - console.error('Unable to get sync data from db'); - console.log(err); - } else { + db.syncEvents(data.roomId, socket.handshake.email, data.eventId, function (err, syncData) { + if (err) { + console.error('Unable to get sync data from db'); + console.log(err); + } else { // socket.emit send only to that user // io.sockets.in(room).emit sends to all users of a room // io.sockets.emit sends to all users (???) - socket.emit('sync update', syncData); - } - }); + socket.emit('sync update', syncData); + } + }); }); socket.on('post room', function (data) { //roomId memberEmail, type, value console.log('== SIO post room', data, socket.handshake.email); db.addEvent(data.roomId, socket.handshake.email, 'POST', data.message, function (err, eventId) { - if (err) { - console.log('ERROR saving post room event'); - console.log(err); - } else { + if (err) { + console.log('ERROR saving post room event'); + console.log(err); + } else { socket.get('email', function (err, email) { if (! err) { - var post = { + var post = { id: eventId, message: data.message, email: email, avatar40: avatar(email, 40) }; - io.sockets.in(data.roomId).emit('post message', post); - } + io.sockets.in(data.roomId).emit('post message', post); + } }); - } - }); + } + }); // checkMemberOfRoom(data.roomId, function (err, isMember) {}) //socket.get('email')} diff --git a/server/views/layout.html b/server/views/layout.html index a6cc17b..2c0d2d0 100644 --- a/server/views/layout.html +++ b/server/views/layout.html @@ -28,7 +28,6 @@ - diff --git a/server/views/widget/templates.html b/server/views/widget/templates.html index 7cbd17e..a31ef44 100644 --- a/server/views/widget/templates.html +++ b/server/views/widget/templates.html @@ -10,4 +10,16 @@ +