|
|
@@ -1,15 +1,13 @@
|
|
|
Settings = require 'settings-sharelatex'
|
|
|
logger = require 'logger-sharelatex'
|
|
|
-redis = require("redis-sharelatex")
|
|
|
+RedisClientManager = require "./RedisClientManager"
|
|
|
SafeJsonParse = require "./SafeJsonParse"
|
|
|
-rclientPub = redis.createClient(Settings.redis.pubsub)
|
|
|
-rclientSub = redis.createClient(Settings.redis.pubsub)
|
|
|
EventLogger = require "./EventLogger"
|
|
|
HealthCheckManager = require "./HealthCheckManager"
|
|
|
|
|
|
module.exports = WebsocketLoadBalancer =
|
|
|
- rclientPub: rclientPub
|
|
|
- rclientSub: rclientSub
|
|
|
+ rclientPubList: RedisClientManager.createClientList(Settings.redis.pubsub)
|
|
|
+ rclientSubList: RedisClientManager.createClientList(Settings.redis.pubsub, Settings.redis.unusedpubsub)
|
|
|
|
|
|
emitToRoom: (room_id, message, payload...) ->
|
|
|
if !room_id?
|
|
|
@@ -20,16 +18,20 @@ module.exports = WebsocketLoadBalancer =
|
|
|
message: message
|
|
|
payload: payload
|
|
|
logger.log {room_id, message, payload, length: data.length}, "emitting to room"
|
|
|
- @rclientPub.publish "editor-events", data
|
|
|
+ for rclientPub in @rclientPubList
|
|
|
+ rclientPub.publish "editor-events", data
|
|
|
|
|
|
emitToAll: (message, payload...) ->
|
|
|
@emitToRoom "all", message, payload...
|
|
|
|
|
|
listenForEditorEvents: (io) ->
|
|
|
- @rclientSub.subscribe "editor-events"
|
|
|
- @rclientSub.on "message", (channel, message) ->
|
|
|
- EventLogger.debugEvent(channel, message) if Settings.debugEvents > 0
|
|
|
- WebsocketLoadBalancer._processEditorEvent io, channel, message
|
|
|
+ logger.log {rclients: @rclientPubList.length}, "publishing editor events"
|
|
|
+ logger.log {rclients: @rclientSubList.length}, "listening for editor events"
|
|
|
+ for rclientSub in @rclientSubList
|
|
|
+ rclientSub.subscribe "editor-events"
|
|
|
+ rclientSub.on "message", (channel, message) ->
|
|
|
+ EventLogger.debugEvent(channel, message) if Settings.debugEvents > 0
|
|
|
+ WebsocketLoadBalancer._processEditorEvent io, channel, message
|
|
|
|
|
|
_processEditorEvent: (io, channel, message) ->
|
|
|
SafeJsonParse.parse message, (error, message) ->
|