Commit 738ef8d7ec782b26cbe91b84814391181b0672f7

Authored by fengwotao
1 parent 8e013295

fix(src/hooks/): 修复ws绑定组件,然后删除组件,ws还在发送信息问题

1 import { RequestContentTypeEnum } from "@/enums/external/httpEnum"; 1 import { RequestContentTypeEnum } from "@/enums/external/httpEnum";
2 import { CreateComponentType } from "@/packages/index.d"; 2 import { CreateComponentType } from "@/packages/index.d";
3 -import { useSocketStore } from "@/store/external/modules/socketStore";  
4 -import { SocketReceiveMessageType } from "@/store/external/modules/socketStore.d"; 3 +import { useSocketStore} from "@/store/external/modules/socketStore";
  4 +import { SocketReceiveMessageType,SocketSendMessageType } from "@/store/external/modules/socketStore.d";
5 import { useChartEditStore } from "@/store/modules/chartEditStore/chartEditStore"; 5 import { useChartEditStore } from "@/store/modules/chartEditStore/chartEditStore";
6 import { getJwtToken, getShareJwtToken } from "@/utils/external/auth"; 6 import { getJwtToken, getShareJwtToken } from "@/utils/external/auth";
7 import { useWebSocket, WebSocketResult } from "@vueuse/core"; 7 import { useWebSocket, WebSocketResult } from "@vueuse/core";
@@ -10,14 +10,20 @@ import { ExtraRequestConfigType } from "@/store/external/modules/extraComponentI @@ -10,14 +10,20 @@ import { ExtraRequestConfigType } from "@/store/external/modules/extraComponentI
10 import { isShareMode } from "@/views/share/hook"; 10 import { isShareMode } from "@/views/share/hook";
11 11
12 12
  13 +
13 interface SocketConnectionPoolType { 14 interface SocketConnectionPoolType {
14 ws: WebSocketResult<SocketReceiveMessageType> 15 ws: WebSocketResult<SocketReceiveMessageType>
15 url: string 16 url: string
16 } 17 }
17 18
  19 +interface SaveHistoryWsMessage{
  20 + id: string
  21 + message: SocketSendMessageType
  22 +}
  23 +
18 const socketConnectionPool: SocketConnectionPoolType[] = [] 24 const socketConnectionPool: SocketConnectionPoolType[] = []
19 25
20 -const saveHistoryWsMessage=ref() 26 +const saveHistoryWsMessage=ref([] as SaveHistoryWsMessage[])
21 27
22 const parse = (value: string) => { 28 const parse = (value: string) => {
23 try { 29 try {
@@ -90,19 +96,39 @@ export const useChartDataSocket = () => { @@ -90,19 +96,39 @@ export const useChartDataSocket = () => {
90 const { subscribeMessage } = message 96 const { subscribeMessage } = message
91 const { send, data } = getSocketInstance(request) 97 const { send, data } = getSocketInstance(request)
92 send(JSON.stringify(subscribeMessage)) 98 send(JSON.stringify(subscribeMessage))
93 - saveHistoryWsMessage.value=subscribeMessage 99 + /**
  100 + * 修改删除组件时,ws还在发送信息问题
  101 + */
  102 + saveHistoryWsMessage.value.push({
  103 + id: targetComponent.id,
  104 + message: subscribeMessage
  105 + })
  106 + //
94 return socketStore.getComponentValueByKeys(targetComponent, parse(unref(data))) 107 return socketStore.getComponentValueByKeys(targetComponent, parse(unref(data)))
95 } 108 }
96 109
  110 + /**
  111 + * 修改删除组件时,ws还在发送信息问题
  112 + * @param targetComponent
  113 + */
97 //删除组件 发送断开消息 114 //删除组件 发送断开消息
98 const disconnectWs=(targetComponent:CreateComponentType)=>{ 115 const disconnectWs=(targetComponent:CreateComponentType)=>{
99 - const { request } = unref(targetComponent)  
100 - const message = socketStore.subscribe(unref(targetComponent))  
101 - if (!message) return  
102 - if((request.requestContentType as RequestContentTypeEnum) !== RequestContentTypeEnum.WEB_SOCKET)return  
103 - const { send } = getSocketInstance(request)  
104 - saveHistoryWsMessage.value.tsSubCmds[0].unsubscribe=true  
105 - send(JSON.stringify(saveHistoryWsMessage.value)) 116 + try{
  117 + saveHistoryWsMessage.value.forEach((item)=>{
  118 + if(item.id===targetComponent.id){
  119 + const { request } = unref(targetComponent)
  120 + if((request.requestContentType as RequestContentTypeEnum) !== RequestContentTypeEnum.WEB_SOCKET)return
  121 + const { send } = getSocketInstance(request)
  122 + item.message.tsSubCmds[0].unsubscribe=true
  123 + send(JSON.stringify(item.message))
  124 + }
  125 + })
  126 + }catch (e) {
  127 + console.log(`
  128 + 错误位置:src/hooks/external/useChartDataSocket.ts
  129 + 错误原因:${e}
  130 + `)
  131 + }
106 } 132 }
107 133
108 return { 134 return {