EditorRealTimeController.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. /* eslint-disable
  2. camelcase,
  3. max-len,
  4. no-unused-vars,
  5. */
  6. // TODO: This file was created by bulk-decaffeinate.
  7. // Fix any style issues and re-enable lint.
  8. /*
  9. * decaffeinate suggestions:
  10. * DS101: Remove unnecessary use of Array.from
  11. * DS102: Remove unnecessary code created because of implicit returns
  12. * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  13. */
  14. let EditorRealTimeController
  15. const Settings = require('settings-sharelatex')
  16. const RedisWrapper = require('../../infrastructure/RedisWrapper')
  17. const rclient = RedisWrapper.client('realtime')
  18. const os = require('os')
  19. const crypto = require('crypto')
  20. const HOST = os.hostname()
  21. const RND = crypto.randomBytes(4).toString('hex') // generate a random key for this process
  22. let COUNT = 0
  23. module.exports = EditorRealTimeController = {
  24. emitToRoom(room_id, message, ...payload) {
  25. // create a unique message id using a counter
  26. const message_id = `web:${HOST}:${RND}-${COUNT++}`
  27. return rclient.publish(
  28. 'editor-events',
  29. JSON.stringify({
  30. room_id,
  31. message,
  32. payload,
  33. _id: message_id
  34. })
  35. )
  36. },
  37. emitToAll(message, ...payload) {
  38. return this.emitToRoom('all', message, ...Array.from(payload))
  39. }
  40. }