Commit 026fd0f4fe1ddfa65ef757594919edd18d403fcd

Authored by ww
1 parent 4e663db6

perf: visual board socket subscribe message

@@ -17,12 +17,13 @@ interface SocketMessageItem { @@ -17,12 +17,13 @@ interface SocketMessageItem {
17 keys: string; 17 keys: string;
18 } 18 }
19 19
20 -interface CmdMapping {  
21 - componentId: string;  
22 - deviceId: string; 20 +interface GroupMappingRecord {
  21 + id: string;
23 recordIndex: number; 22 recordIndex: number;
24 dataSourceIndex: number; 23 dataSourceIndex: number;
25 attribute: string; 24 attribute: string;
  25 + deviceId: string;
  26 + slaveDeviceId: string;
26 } 27 }
27 28
28 interface ResponseMessage { 29 interface ResponseMessage {
@@ -50,7 +51,9 @@ const generateMessage = (deviceId: string, cmdId: number, attr: string): SocketM @@ -50,7 +51,9 @@ const generateMessage = (deviceId: string, cmdId: number, attr: string): SocketM
50 export function useSocketConnect(dataSourceRef: Ref<DataBoardLayoutInfo[]>) { 51 export function useSocketConnect(dataSourceRef: Ref<DataBoardLayoutInfo[]>) {
51 const token = getAuthCache(JWT_TOKEN_KEY); 52 const token = getAuthCache(JWT_TOKEN_KEY);
52 53
53 - const cmdIdMapping = new Map<number, CmdMapping>(); 54 + const cmdIdMapping = new Map<number, GroupMappingRecord[]>();
  55 +
  56 + const groupMapping = new Map<string, GroupMappingRecord[]>();
54 57
55 const waitSendQueue: string[] = []; 58 const waitSendQueue: string[] = [];
56 59
@@ -64,6 +67,44 @@ export function useSocketConnect(dataSourceRef: Ref<DataBoardLayoutInfo[]>) { @@ -64,6 +67,44 @@ export function useSocketConnect(dataSourceRef: Ref<DataBoardLayoutInfo[]>) {
64 return unref(dataSourceRef)[recordIndex].record.dataSource[dataSourceIndex]; 67 return unref(dataSourceRef)[recordIndex].record.dataSource[dataSourceIndex];
65 }; 68 };
66 69
  70 + const mergeGroup = (dataSourceRef: Ref<DataBoardLayoutInfo[]>) => {
  71 + for (let recordIndex = 0; recordIndex < unref(dataSourceRef).length; recordIndex++) {
  72 + const record = unref(dataSourceRef).at(recordIndex)!;
  73 + const dataSource = record?.record.dataSource;
  74 + for (let dataSourceIndex = 0; dataSourceIndex < dataSource.length; dataSourceIndex++) {
  75 + const dataDatum = dataSource.at(dataSourceIndex)!;
  76 + const { deviceId, slaveDeviceId, attribute } = dataDatum;
  77 + const groupMappingRecord: GroupMappingRecord = {
  78 + id: record.record.id,
  79 + recordIndex,
  80 + dataSourceIndex,
  81 + attribute,
  82 + deviceId,
  83 + slaveDeviceId,
  84 + };
  85 + if (groupMapping.has(slaveDeviceId || deviceId)) {
  86 + const group = groupMapping.get(slaveDeviceId || deviceId);
  87 + group?.push(groupMappingRecord);
  88 + } else {
  89 + groupMapping.set(slaveDeviceId || deviceId, [groupMappingRecord]);
  90 + }
  91 + }
  92 + }
  93 + };
  94 +
  95 + function generateGroupMessage() {
  96 + const messageList: SocketMessageItem[] = [];
  97 + let cmdId = 0;
  98 + groupMapping.forEach((value, key) => {
  99 + const message = generateMessage(key, cmdId, value.map((item) => item.attribute).join(','));
  100 + messageList.push(message);
  101 + setCmdId(cmdId, value);
  102 + cmdId++;
  103 + });
  104 + console.log(cmdIdMapping);
  105 + return messageList;
  106 + }
  107 +
67 const { close, send, open, status } = useWebSocket(config.server, { 108 const { close, send, open, status } = useWebSocket(config.server, {
68 onConnected() { 109 onConnected() {
69 if (waitSendQueue.length) { 110 if (waitSendQueue.length) {
@@ -80,11 +121,14 @@ export function useSocketConnect(dataSourceRef: Ref<DataBoardLayoutInfo[]>) { @@ -80,11 +121,14 @@ export function useSocketConnect(dataSourceRef: Ref<DataBoardLayoutInfo[]>) {
80 if (isNullAndUnDef(subscriptionId)) return; 121 if (isNullAndUnDef(subscriptionId)) return;
81 const mappingRecord = cmdIdMapping.get(subscriptionId); 122 const mappingRecord = cmdIdMapping.get(subscriptionId);
82 if (!mappingRecord) return; 123 if (!mappingRecord) return;
83 - const { attribute, recordIndex, dataSourceIndex } = mappingRecord;  
84 - const [[timespan, value]] = data[attribute];  
85 - const record = getNeedUpdateValueByIndex(recordIndex, dataSourceIndex);  
86 - record.componentInfo.value = value;  
87 - record.componentInfo.updateTime = timespan; 124 + mappingRecord.forEach((item) => {
  125 + const { attribute, recordIndex, dataSourceIndex } = item;
  126 + const [[timespan, value]] = data[attribute];
  127 + const record = getNeedUpdateValueByIndex(recordIndex, dataSourceIndex);
  128 + record.componentInfo.value = value;
  129 + record.componentInfo.updateTime = timespan;
  130 + });
  131 + return;
88 } catch (error) { 132 } catch (error) {
89 throw Error(error as string); 133 throw Error(error as string);
90 } 134 }
@@ -94,40 +138,14 @@ export function useSocketConnect(dataSourceRef: Ref<DataBoardLayoutInfo[]>) { @@ -94,40 +138,14 @@ export function useSocketConnect(dataSourceRef: Ref<DataBoardLayoutInfo[]>) {
94 // }, 138 // },
95 }); 139 });
96 140
97 - const setCmdId = (cmdId: number, record: CmdMapping) => { 141 + const setCmdId = (cmdId: number, record: GroupMappingRecord[]) => {
98 cmdIdMapping.set(cmdId, record); 142 cmdIdMapping.set(cmdId, record);
99 }; 143 };
100 144
101 const transformSocketMessageItem = () => { 145 const transformSocketMessageItem = () => {
102 - const messageList: SocketMessageItem[] = [];  
103 - let index = 0;  
104 - unref(dataSourceRef).forEach((record, recordIndex) => {  
105 - const componentId = record.record.id;  
106 - for (  
107 - let dataSourceIndex = 0;  
108 - dataSourceIndex < record.record.dataSource.length;  
109 - dataSourceIndex++  
110 - ) {  
111 - const dataSource = record.record.dataSource[dataSourceIndex];  
112 - const { deviceId, attribute, slaveDeviceId, gatewayDevice } = dataSource;  
113 - if (!attribute) continue;  
114 - const cmdId = index;  
115 - index++;  
116 - setCmdId(cmdId, {  
117 - componentId,  
118 - deviceId: gatewayDevice ? deviceId : slaveDeviceId,  
119 - recordIndex,  
120 - dataSourceIndex,  
121 - attribute,  
122 - });  
123 -  
124 - messageList.push(  
125 - generateMessage(gatewayDevice ? slaveDeviceId : deviceId, cmdId, attribute)  
126 - );  
127 - }  
128 - }); 146 + mergeGroup(dataSourceRef);
129 return { 147 return {
130 - tsSubCmds: messageList, 148 + tsSubCmds: generateGroupMessage(),
131 } as SocketMessage; 149 } as SocketMessage;
132 }; 150 };
133 151