Commit e2056a649689bfd55f7593d5d5e6a65a3361768d

Authored by xp.Huang
2 parents b9ccd109 8f736844

Merge branch 'fix/data-board-socket' into 'main_dev'

fix: 修复数据看板socket连接问题

See merge request yunteng/thingskit-front!726
@@ -4,12 +4,12 @@ @@ -4,12 +4,12 @@
4 import { ComponentPropsConfigType } from '../../../index.type'; 4 import { ComponentPropsConfigType } from '../../../index.type';
5 import { option } from './config'; 5 import { option } from './config';
6 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime'; 6 import { UpdateTime } from '/@/views/visual/commonComponents/UpdateTime';
7 - // import { useIntervalFn } from '@vueuse/core';  
8 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName'; 7 import { DeviceName } from '/@/views/visual/commonComponents/DeviceName';
9 import { useComponentScale } from '/@/views/visual/packages/hook/useComponentScale'; 8 import { useComponentScale } from '/@/views/visual/packages/hook/useComponentScale';
10 import { useReceiveMessage } from '../../../hook/useReceiveMessage'; 9 import { useReceiveMessage } from '../../../hook/useReceiveMessage';
11 import { useReceiveValue } from '../../../hook/useReceiveValue'; 10 import { useReceiveValue } from '../../../hook/useReceiveValue';
12 import { MultipleDataFetchUpdateFn } from '../../../hook/socket/useSocket.type'; 11 import { MultipleDataFetchUpdateFn } from '../../../hook/socket/useSocket.type';
  12 + import { useMultipleDataFetch } from '../../../hook/socket/useSocket';
13 13
14 const props = defineProps<{ 14 const props = defineProps<{
15 config: ComponentPropsConfigType<typeof option>; 15 config: ComponentPropsConfigType<typeof option>;
@@ -23,6 +23,7 @@ import { @@ -23,6 +23,7 @@ import {
23 TsSubCmdsItemType, 23 TsSubCmdsItemType,
24 } from './useSocket.type'; 24 } from './useSocket.type';
25 import { ComponentPropsConfigType } from '../../index.type'; 25 import { ComponentPropsConfigType } from '../../index.type';
  26 +import { isNullOrUnDef } from '/@/utils/is';
26 27
27 interface DeviceGroupMapType { 28 interface DeviceGroupMapType {
28 subscriptionId: number; 29 subscriptionId: number;
@@ -70,11 +71,14 @@ class Subscriber { @@ -70,11 +71,14 @@ class Subscriber {
70 clearSubscriber = () => { 71 clearSubscriber = () => {
71 this.deviceGroupMap.clear(); 72 this.deviceGroupMap.clear();
72 this.subscriptionMap.clear(); 73 this.subscriptionMap.clear();
73 - this.componentUpdateFnMap.clear();  
74 - this.componentGroupUpdateFnMap.clear();  
75 this.customSubscribeMap.clear(); 74 this.customSubscribeMap.clear();
76 }; 75 };
77 76
  77 + clearUpdateFn() {
  78 + this.componentUpdateFnMap.clear();
  79 + this.componentGroupUpdateFnMap.clear();
  80 + }
  81 +
78 addSubscriber = (info: Record<'deviceId' | 'slaveDeviceId' | 'attribute' | 'uuid', string>) => { 82 addSubscriber = (info: Record<'deviceId' | 'slaveDeviceId' | 'attribute' | 'uuid', string>) => {
79 const { deviceId, attribute, uuid } = info; 83 const { deviceId, attribute, uuid } = info;
80 if (!this.deviceGroupMap.has(deviceId)) { 84 if (!this.deviceGroupMap.has(deviceId)) {
@@ -188,7 +192,7 @@ class Subscriber { @@ -188,7 +192,7 @@ class Subscriber {
188 return; 192 return;
189 } 193 }
190 194
191 - if (message.subscriptionId) { 195 + if (!isNullOrUnDef(message.subscriptionId)) {
192 this.triggerTsSubCmdsMessage(message); 196 this.triggerTsSubCmdsMessage(message);
193 } 197 }
194 } 198 }
@@ -204,29 +208,30 @@ class Subscriber { @@ -204,29 +208,30 @@ class Subscriber {
204 const updateGroups = this.componentGroupUpdateFnMap.get(deviceId); 208 const updateGroups = this.componentGroupUpdateFnMap.get(deviceId);
205 209
206 if (updateGroups) { 210 if (updateGroups) {
207 - (updateGroups || []).forEach((item) => { 211 + for (const item of updateGroups || []) {
208 const { attributes, fn } = item; 212 const { attributes, fn } = item;
209 try { 213 try {
210 - if (!fn) return; 214 + if (!fn) continue;
211 fn?.(this.getGroupScopeMessage(message, attributes, deviceId), deviceId, attributes); 215 fn?.(this.getGroupScopeMessage(message, attributes, deviceId), deviceId, attributes);
212 } catch (error) { 216 } catch (error) {
213 console.error(`deviceId: ${deviceId}`); 217 console.error(`deviceId: ${deviceId}`);
214 throw error; 218 throw error;
215 } 219 }
216 - }); 220 + }
  221 + return;
217 } 222 }
218 223
219 - subscriptionGroup.forEach((item) => { 224 + for (const item of subscriptionGroup) {
220 const { attribute, uuid } = item; 225 const { attribute, uuid } = item;
221 const updateFn = this.componentUpdateFnMap.get(uuid); 226 const updateFn = this.componentUpdateFnMap.get(uuid);
222 try { 227 try {
223 - if (!updateFn) return; 228 + if (!updateFn) continue;
224 updateFn?.(this.getScopeMessage(message, [attribute]), attribute); 229 updateFn?.(this.getScopeMessage(message, [attribute]), attribute);
225 } catch (error) { 230 } catch (error) {
226 console.error(`uuid: ${uuid}`); 231 console.error(`uuid: ${uuid}`);
227 throw error; 232 throw error;
228 } 233 }
229 - }); 234 + }
230 } 235 }
231 236
232 triggerAlarmDataMesssage(message: ReceiveAlarmDataCmdsMessageType) { 237 triggerAlarmDataMesssage(message: ReceiveAlarmDataCmdsMessageType) {
@@ -299,6 +304,8 @@ export const useSocket = (dataSourceRef: Ref<WidgetDataType[]>) => { @@ -299,6 +304,8 @@ export const useSocket = (dataSourceRef: Ref<WidgetDataType[]>) => {
299 304
300 onUnmounted(() => { 305 onUnmounted(() => {
301 close(); 306 close();
  307 + subscriber.clearSubscriber();
  308 + subscriber.clearUpdateFn();
302 }); 309 });
303 310
304 return { 311 return {