EditorRealTimeController.coffee 1.1 KB

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