2014-11-13 16:03:37 +00:00
|
|
|
Settings = require 'settings-sharelatex'
|
2014-11-24 12:09:12 +00:00
|
|
|
logger = require 'logger-sharelatex'
|
2014-11-13 16:03:37 +00:00
|
|
|
redis = require("redis-sharelatex")
|
2015-12-01 11:05:49 +00:00
|
|
|
SafeJsonParse = require "./SafeJsonParse"
|
2014-11-13 16:03:37 +00:00
|
|
|
rclientPub = redis.createClient(Settings.redis.web)
|
|
|
|
rclientSub = redis.createClient(Settings.redis.web)
|
|
|
|
|
|
|
|
module.exports = WebsocketLoadBalancer =
|
|
|
|
rclientPub: rclientPub
|
|
|
|
rclientSub: rclientSub
|
|
|
|
|
|
|
|
emitToRoom: (room_id, message, payload...) ->
|
2014-11-24 12:09:12 +00:00
|
|
|
if !room_id?
|
2014-11-24 22:28:50 +00:00
|
|
|
logger.warn {message, payload}, "no room_id provided, ignoring emitToRoom"
|
2014-11-24 12:09:12 +00:00
|
|
|
return
|
2015-11-30 15:25:09 +00:00
|
|
|
data = JSON.stringify
|
2014-11-13 16:03:37 +00:00
|
|
|
room_id: room_id
|
|
|
|
message: message
|
|
|
|
payload: payload
|
2015-11-30 15:25:09 +00:00
|
|
|
logger.log {room_id, message, payload, length: data.length}, "emitting to room"
|
|
|
|
@rclientPub.publish "editor-events", data
|
2014-11-13 16:03:37 +00:00
|
|
|
|
|
|
|
emitToAll: (message, payload...) ->
|
|
|
|
@emitToRoom "all", message, payload...
|
|
|
|
|
|
|
|
listenForEditorEvents: (io) ->
|
|
|
|
@rclientSub.subscribe "editor-events"
|
|
|
|
@rclientSub.on "message", (channel, message) ->
|
|
|
|
WebsocketLoadBalancer._processEditorEvent io, channel, message
|
|
|
|
|
|
|
|
_processEditorEvent: (io, channel, message) ->
|
2015-12-01 11:05:49 +00:00
|
|
|
SafeJsonParse.parse message, (error, message) ->
|
|
|
|
if error?
|
|
|
|
logger.error {err: error, channel}, "error parsing JSON"
|
|
|
|
return
|
|
|
|
if message.room_id == "all"
|
|
|
|
io.sockets.emit(message.message, message.payload...)
|
|
|
|
else if message.room_id?
|
|
|
|
io.sockets.in(message.room_id).emit(message.message, message.payload...)
|
2014-11-13 16:03:37 +00:00
|
|
|
|