EditorRealTimeController.coffee 1.1 KB

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