HttpApiController.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /* eslint-disable
  2. camelcase,
  3. no-unused-vars,
  4. */
  5. // TODO: This file was created by bulk-decaffeinate.
  6. // Fix any style issues and re-enable lint.
  7. /*
  8. * decaffeinate suggestions:
  9. * DS101: Remove unnecessary use of Array.from
  10. * DS102: Remove unnecessary code created because of implicit returns
  11. * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  12. */
  13. let HttpApiController
  14. const WebsocketLoadBalancer = require('./WebsocketLoadBalancer')
  15. const DrainManager = require('./DrainManager')
  16. const logger = require('logger-sharelatex')
  17. module.exports = HttpApiController = {
  18. sendMessage(req, res, next) {
  19. logger.log({ message: req.params.message }, 'sending message')
  20. if (Array.isArray(req.body)) {
  21. for (const payload of Array.from(req.body)) {
  22. WebsocketLoadBalancer.emitToRoom(
  23. req.params.project_id,
  24. req.params.message,
  25. payload
  26. )
  27. }
  28. } else {
  29. WebsocketLoadBalancer.emitToRoom(
  30. req.params.project_id,
  31. req.params.message,
  32. req.body
  33. )
  34. }
  35. return res.send(204)
  36. }, // No content
  37. startDrain(req, res, next) {
  38. const io = req.app.get('io')
  39. let rate = req.query.rate || '4'
  40. rate = parseFloat(rate) || 0
  41. logger.log({ rate }, 'setting client drain rate')
  42. DrainManager.startDrain(io, rate)
  43. return res.send(204)
  44. },
  45. disconnectClient(req, res, next) {
  46. const io = req.app.get('io')
  47. const { client_id } = req.params
  48. const client = io.sockets.sockets[client_id]
  49. if (!client) {
  50. logger.info({ client_id }, 'api: client already disconnected')
  51. res.sendStatus(404)
  52. return
  53. }
  54. logger.warn({ client_id }, 'api: requesting client disconnect')
  55. client.on('disconnect', () => res.sendStatus(204))
  56. return client.disconnect()
  57. }
  58. }