WebsocketLoadBalancer.coffee 954 B

123456789101112131415161718192021222324252627282930
  1. Settings = require 'settings-sharelatex'
  2. redis = require("redis-sharelatex")
  3. rclientPub = redis.createClient(Settings.redis.web)
  4. rclientSub = redis.createClient(Settings.redis.web)
  5. module.exports = WebsocketLoadBalancer =
  6. rclientPub: rclientPub
  7. rclientSub: rclientSub
  8. emitToRoom: (room_id, message, payload...) ->
  9. @rclientPub.publish "editor-events", JSON.stringify
  10. room_id: room_id
  11. message: message
  12. payload: payload
  13. emitToAll: (message, payload...) ->
  14. @emitToRoom "all", message, payload...
  15. listenForEditorEvents: (io) ->
  16. @rclientSub.subscribe "editor-events"
  17. @rclientSub.on "message", (channel, message) ->
  18. WebsocketLoadBalancer._processEditorEvent io, channel, message
  19. _processEditorEvent: (io, channel, message) ->
  20. message = JSON.parse(message)
  21. if message.room_id == "all"
  22. io.sockets.emit(message.message, message.payload...)
  23. else
  24. io.sockets.in(message.room_id).emit(message.message, message.payload...)