|
|
@@ -10,6 +10,7 @@ ONE_DAY_IN_S = ONE_HOUR_IN_S * 24
|
|
|
FOUR_DAYS_IN_S = ONE_DAY_IN_S * 4
|
|
|
|
|
|
USER_TIMEOUT_IN_S = ONE_HOUR_IN_S / 4
|
|
|
+REFRESH_TIMEOUT_IN_S = 10 # only show clients which have responded to a refresh request in the last 10 seconds
|
|
|
|
|
|
module.exports =
|
|
|
# Use the same method for when a user connects, and when a user sends a cursor
|
|
|
@@ -38,6 +39,16 @@ module.exports =
|
|
|
logger.err err:err, project_id:project_id, client_id:client_id, "problem marking user as connected"
|
|
|
callback(err)
|
|
|
|
|
|
+ refreshClient: (project_id, client_id, callback = (err) ->) ->
|
|
|
+ logger.log project_id:project_id, client_id:client_id, "refreshing connected client"
|
|
|
+ multi = rclient.multi()
|
|
|
+ multi.hset Keys.connectedUser({project_id, client_id}), "last_updated_at", Date.now()
|
|
|
+ multi.expire Keys.connectedUser({project_id, client_id}), USER_TIMEOUT_IN_S
|
|
|
+ multi.exec (err)->
|
|
|
+ if err?
|
|
|
+ logger.err err:err, project_id:project_id, client_id:client_id, "problem refreshing connected client"
|
|
|
+ callback(err)
|
|
|
+
|
|
|
markUserAsDisconnected: (project_id, client_id, callback)->
|
|
|
logger.log project_id:project_id, client_id:client_id, "marking user as disconnected"
|
|
|
multi = rclient.multi()
|
|
|
@@ -56,6 +67,7 @@ module.exports =
|
|
|
else
|
|
|
result.connected = true
|
|
|
result.client_id = client_id
|
|
|
+ result.client_age = (Date.now() - parseInt(result.last_updated_at,10)) / 1000
|
|
|
if result.cursorData?
|
|
|
try
|
|
|
result.cursorData = JSON.parse(result.cursorData)
|
|
|
@@ -74,6 +86,6 @@ module.exports =
|
|
|
async.series jobs, (err, users = [])->
|
|
|
return callback(err) if err?
|
|
|
users = users.filter (user) ->
|
|
|
- user?.connected
|
|
|
+ user?.connected && user?.client_age < REFRESH_TIMEOUT_IN_S
|
|
|
callback null, users
|
|
|
|