Socket.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. const io = require('socket.io-client')
  2. const Emitter = require('namespace-emitter')
  3. const parseUrl = require('url-parse')
  4. /**
  5. * WebSocket status API client for Transloadit.
  6. */
  7. module.exports = class TransloaditSocket {
  8. constructor (url, assembly) {
  9. const emitter = Emitter()
  10. this.on = emitter.on.bind(emitter)
  11. this.off = emitter.off.bind(emitter)
  12. this.emit = emitter.emit.bind(emitter)
  13. const parsed = parseUrl(url)
  14. this.assembly = assembly
  15. this.socket = io.connect(parsed.origin, {
  16. path: parsed.pathname
  17. })
  18. this.attachDefaultHandlers()
  19. }
  20. attachDefaultHandlers () {
  21. this.socket.on('connect', () => {
  22. this.socket.emit('assembly_connect', {
  23. id: this.assembly.assembly_id
  24. })
  25. this.emit('connect')
  26. })
  27. this.socket.on('assembly_finished', () => {
  28. this.emit('finished')
  29. this.close()
  30. })
  31. this.socket.on('assembly_upload_finished', (file) => {
  32. this.emit('upload', file)
  33. })
  34. this.socket.on('assembly_uploading_finished', () => {
  35. this.emit('executing')
  36. })
  37. this.socket.on('assembly_upload_meta_data_extracted', () => {
  38. this.emit('metadata')
  39. })
  40. this.socket.on('assembly_result_finished', (stepName, result) => {
  41. this.emit('result', stepName, result)
  42. })
  43. this.socket.on('assembly_error', (err) => {
  44. this.emit('error', Object.assign(new Error(err.message), err))
  45. })
  46. }
  47. close () {
  48. this.socket.disconnect()
  49. }
  50. }