ws.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import defRegistry from './flow/default-registry'
  2. import flowMut from './flow/mutation-types'
  3. import chatMut from './chat/mutation-types'
  4. import flowService from '@/services/flowservice'
  5. let flow = {}
  6. let chat = {}
  7. for (let k in flowMut) { flow[k] = 'flow/' + k }
  8. for (let k in chatMut) { chat[k] = 'chat/' + k }
  9. let targetws
  10. export default store => {
  11. store.subscribe(mut => {
  12. // console.log('I changed -- perform the connection somehow', mut)
  13. if (mut.type === 'route/ROUTE_CHANGED') {
  14. let route = mut.payload.to
  15. let ctx = route.params.context
  16. let urlPath = [
  17. window.location.host,
  18. ctx,
  19. 'conn'
  20. ]
  21. targetws = 'ws://' + urlPath.join('/')
  22. if (window.location.protocol === 'https:') {
  23. targetws = 'wss://' + urlPath.join('/')
  24. }
  25. flowService.connect(targetws)
  26. }
  27. })
  28. // DEBUG PURPOSES
  29. window.dbgDisconnect = () => {
  30. flowService.close()
  31. }
  32. window.dbgReconnect = () => {
  33. flowService.connect(targetws)
  34. }
  35. // Connected
  36. flowService.connected(() => {
  37. // Make this in a service
  38. if (store.state.route.params.sessId === undefined) {
  39. flowService.sessionNew()
  40. return
  41. }
  42. store.dispatch(flow.NOTIFICATION_ADD, 'Connected')
  43. flowService.sessionLoad(undefined, store.state.route.params.sessId)
  44. })
  45. flowService.on('document', (v) => {
  46. store.commit(flow.DOCUMENT_UPDATE, v.data)
  47. })
  48. flowService.on('nodeUpdate', (v) => {
  49. store.commit(flow.NODE_UPDATE, v.data)
  50. })
  51. flowService.on('registry', (v) => {
  52. let res = {}
  53. for (let k of Object.keys(v.data)) {
  54. const e = v.data[k]
  55. res[k] = {
  56. categories: e.categories,
  57. inputs: e.inputs,
  58. inputDesc: e.inputDesc,
  59. output: e.output,
  60. outputDesC: e.outputDesc,
  61. style: e.extra && e.extra.style
  62. }
  63. }
  64. store.commit(flow.REGISTRY_UPDATE, Object.assign({}, defRegistry, res))
  65. })
  66. flowService.on('nodeActivity', (v) => {
  67. store.commit(flow.ACTIVITY_UPDATE, v.data || {nodes: {}})
  68. })
  69. flowService.on('sessionNotify', (v) => {
  70. // ACTION
  71. store.dispatch(flow.NOTIFICATION_ADD, v.data)
  72. })
  73. flowService.on('sessionJoin', (v) => {
  74. store.dispatch(chat.CHAT_JOIN, {
  75. handle: store.state.chat.handle,
  76. sessId: store.state.route.params.sessId
  77. })
  78. store.commit(chat.EVENTS_UPDATE, [])
  79. })
  80. /// // CHAT //////
  81. flowService.on('chatUserList', (v) => {
  82. store.commit(chat.USERLIST_UPDATE, v.data)
  83. })
  84. flowService.on('chatEvent', (v) => {
  85. store.commit(chat.EVENT_ADD, v.data)
  86. })
  87. }