From 08e3eac008aa74e5d7656063e4ef933916874969 Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Wed, 24 Jul 2013 16:29:17 -0400 Subject: [PATCH] closes #120 --- public/css/style.less | 9 +++++++++ public/src/forum/account.js | 16 +++++++++++++++- public/templates/account.tpl | 3 +++ src/websockets.js | 19 ++++++++++++++++--- 4 files changed, 43 insertions(+), 4 deletions(-) diff --git a/public/css/style.less b/public/css/style.less index 5cd6887afd..af5fb49f18 100644 --- a/public/css/style.less +++ b/public/css/style.less @@ -201,6 +201,15 @@ footer.footer { display:inline-block; vertical-align:top; } + +.account-online-status { + .icon-circle-blank { + color:red; + } + .icon-circle { + color:green; + } +} .user-profile-picture { width:128px; diff --git a/public/src/forum/account.js b/public/src/forum/account.js index ae87fa4e1b..b54d0f39f5 100644 --- a/public/src/forum/account.js +++ b/public/src/forum/account.js @@ -37,7 +37,21 @@ $('.user-recent-posts .topic-row').on('click', function() { ajaxify.go($(this).attr('topic-url')); - }) + }); + + var onlineStatus = $('.account-online-status'); + + socket.on('api:user.isOnline', function(online) { + if(online) { + onlineStatus.find('span span').text('online'); + onlineStatus.find('i').attr('class', 'icon-circle'); + } else { + onlineStatus.find('span span').text('offline'); + onlineStatus.find('i').attr('class', 'icon-circle-blank'); + } + }); + + socket.emit('api:user.isOnline', theirid); }); diff --git a/public/templates/account.tpl b/public/templates/account.tpl index 0813a1d346..79a94cae4d 100644 --- a/public/templates/account.tpl +++ b/public/templates/account.tpl @@ -20,6 +20,9 @@
+
+ offline +
Follow
diff --git a/src/websockets.js b/src/websockets.js index 6aabb17be9..65a9a4a7ce 100644 --- a/src/websockets.js +++ b/src/websockets.js @@ -47,7 +47,8 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }), userSockets[uid] = userSockets[uid] || []; userSockets[uid].push(socket); - + if(uid) + io.sockets.in('global').emit('api:user.isOnline', isUserOnline(uid)); socket.join('uid_' + uid); }); }); @@ -61,8 +62,12 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }), userSockets[uid].splice(index, 1); } - if(userSockets[uid].length === 0) + if(userSockets[uid].length === 0) { delete users[sessionID]; + console.log('dc ', userSockets[uid]); + if(uid) + io.sockets.in('global').emit('api:user.isOnline', isUserOnline(uid)); + } for(var roomName in rooms) { @@ -215,12 +220,16 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }), user.reset.commit(socket, data.code, data.password); }); + function isUserOnline(uid) { + return !!userSockets[uid] && userSockets[uid].length > 0; + } + socket.on('api:user.get_online_users', function(data) { var returnData = []; for(var i=0; i 0) + if(isUserOnline(uid)) returnData.push(uid); else returnData.push(0); @@ -228,6 +237,10 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }), socket.emit('api:user.get_online_users', returnData); }); + socket.on('api:user.isOnline', function(uid) { + socket.emit('api:user.isOnline', isUserOnline(uid)); + }); + socket.on('api:user.changePassword', function(data) { user.changePassword(socket, uid, data, function(success) { if(success) {