overleaf/services/real-time/app/coffee/DrainManager.coffee

26 lines
No EOL
736 B
CoffeeScript

logger = require "logger-sharelatex"
module.exports =
startDrain: (io, rate) ->
# Clear out any old interval
clearInterval @interval
if rate == 0
return
@interval = setInterval () =>
@reconnectNClients(io, rate)
, 1000
RECONNECTED_CLIENTS: {}
reconnectNClients: (io, N) ->
drainedCount = 0
for client in io.sockets.clients()
if !@RECONNECTED_CLIENTS[client.id]
@RECONNECTED_CLIENTS[client.id] = true
logger.log {client_id: client.id}, "Asking client to reconnect gracefully"
client.emit "reconnectGracefully"
drainedCount++
haveDrainedNClients = (drainedCount == N)
if haveDrainedNClients
break
if drainedCount < N
logger.log "All clients have been told to reconnectGracefully"