EditorRealTimeController.coffee 1.0 KB

1234567891011121314151617181920212223242526272829303132
  1. Settings = require 'settings-sharelatex'
  2. redis = require("redis-sharelatex")
  3. rclientPub = redis.createClient(Settings.redis.web)
  4. rclientSub = redis.createRobustSubscriptionClient(Settings.redis.web)
  5. module.exports = EditorRealTimeController =
  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: () ->
  16. @rclientSub.subscribe "editor-events"
  17. @rclientSub.on "message", (channel, message) ->
  18. return unless channel == "editor-events"
  19. EditorRealTimeController._processEditorEvent(channel, message)
  20. _processEditorEvent: (channel, message) ->
  21. io = require('../../infrastructure/Server').io
  22. message = JSON.parse(message)
  23. if message.room_id == "all"
  24. io.sockets.emit(message.message, message.payload...)
  25. else
  26. io.sockets.in(message.room_id).emit(message.message, message.payload...)