Browse Source

fix chat duplication on reconnection

luis 7 năm trước cách đây
mục cha
commit
5ae13fe615

+ 4 - 0
browser/vue-flow/src/services/flowservice.js

@@ -70,6 +70,10 @@ function FlowService () {
       if (ws) { ws.close() }
       if (!reconnect) connect()
       log('Connecting to', loc)
+    },
+    close () {
+      if (!ws) { return }
+      ws.close()
     }
   }
 

+ 3 - 3
browser/vue-flow/src/store/chat/actions.js

@@ -5,12 +5,12 @@ export default {
   [m.EVENT_SEND] (ctx, msg) {
     flowService.chatEvent(msg)
   },
-  [m.USERLIST_UPDATE] ({commit}, userlist) {
-    commit(m.USERLIST_UPDATE, userlist)
-  },
   [m.EVENT_ADD] ({commit}, event) {
     commit(m.EVENT_ADD, event)
   },
+  [m.USERLIST_UPDATE] ({commit}, userlist) {
+    commit(m.USERLIST_UPDATE, userlist)
+  },
   [m.HANDLE_UPDATE] (ctx, name) {
     ctx.commit(m.HANDLE_UPDATE, name)
     flowService.chatRename(name)

+ 1 - 0
browser/vue-flow/src/store/chat/mutation-types.js

@@ -2,6 +2,7 @@ var types = [
   'USERLIST_UPDATE',
   'EVENT_ADD',
   'EVENT_SEND',
+  'EVENTS_UPDATE',
   'HANDLE_UPDATE',
   'CHAT_JOIN'
 ]

+ 3 - 0
browser/vue-flow/src/store/chat/mutations.js

@@ -7,6 +7,9 @@ export default {
   [m.EVENT_ADD] (state, event) {
     state.events.push(event)
   },
+  [m.EVENTS_UPDATE] (state, events) {
+    state.events = events
+  },
   [m.HANDLE_UPDATE] (state, handle) {
     state.handle = handle
     localStorage.setItem('handle', handle)

+ 13 - 5
browser/vue-flow/src/store/ws.js

@@ -3,13 +3,14 @@ import flowMut from './flow/mutation-types'
 import chatMut from './chat/mutation-types'
 import flowService from '@/services/flowservice'
 
-let flow = {}, chat = {}
+let flow = {}
+let chat = {}
 for (let k in flowMut) { flow[k] = 'flow/' + k }
 for (let k in chatMut) { chat[k] = 'chat/' + k }
 
-export default store => {
-  store.dispatch('chat/EVENT_ADD', {type: 'msg', handle: 'system', data: 'hello'})
+let targetws
 
+export default store => {
   store.subscribe(mut => {
     // console.log('I changed -- perform the connection somehow', mut)
     if (mut.type === 'route/ROUTE_CHANGED') {
@@ -20,13 +21,20 @@ export default store => {
         ctx,
         'conn'
       ]
-      let targetws = 'ws://' + urlPath.join('/')
+      targetws = 'ws://' + urlPath.join('/')
       if (window.location.protocol === 'https:') {
         targetws = 'wss://' + urlPath.join('/')
       }
       flowService.connect(targetws)
     }
   })
+  // DEBUG PURPOSES
+  window.dbgDisconnect = () => {
+    flowService.close()
+  }
+  window.dbgReconnect = () => {
+    flowService.connect(targetws)
+  }
 
   // Connected
   flowService.connected(() => {
@@ -40,7 +48,6 @@ export default store => {
   })
 
   flowService.on('document', (v) => {
-    console.log('Store:', store)
     store.commit(flow.DOCUMENT_UPDATE, v.data)
   })
   flowService.on('nodeUpdate', (v) => {
@@ -75,6 +82,7 @@ export default store => {
       handle: store.state.chat.handle,
       sessId: store.state.route.params.sessId
     })
+    store.commit(chat.EVENTS_UPDATE, [])
   })
 
   /// // CHAT //////

+ 1 - 0
go/src/flowserver/flowbuilder.go

@@ -140,6 +140,7 @@ func FlowBuild(rawData []byte, r *registry.R, startingID string) (*flow.Flow, er
 				if err != nil {
 					return nil, err
 				}
+				// if type Different than ours try to convert
 			}
 			op, err = f.DefOp(node.ID, node.Src, param...)
 			if err != nil {