Commit 026fd0f4fe1ddfa65ef757594919edd18d403fcd
1 parent
4e663db6
perf: visual board socket subscribe message
Showing
1 changed file
with
56 additions
and
38 deletions
| ... | ... | @@ -17,12 +17,13 @@ interface SocketMessageItem { |
| 17 | 17 | keys: string; |
| 18 | 18 | } |
| 19 | 19 | |
| 20 | -interface CmdMapping { | |
| 21 | - componentId: string; | |
| 22 | - deviceId: string; | |
| 20 | +interface GroupMappingRecord { | |
| 21 | + id: string; | |
| 23 | 22 | recordIndex: number; |
| 24 | 23 | dataSourceIndex: number; |
| 25 | 24 | attribute: string; |
| 25 | + deviceId: string; | |
| 26 | + slaveDeviceId: string; | |
| 26 | 27 | } |
| 27 | 28 | |
| 28 | 29 | interface ResponseMessage { |
| ... | ... | @@ -50,7 +51,9 @@ const generateMessage = (deviceId: string, cmdId: number, attr: string): SocketM |
| 50 | 51 | export function useSocketConnect(dataSourceRef: Ref<DataBoardLayoutInfo[]>) { |
| 51 | 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 | 58 | const waitSendQueue: string[] = []; |
| 56 | 59 | |
| ... | ... | @@ -64,6 +67,44 @@ export function useSocketConnect(dataSourceRef: Ref<DataBoardLayoutInfo[]>) { |
| 64 | 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 | 108 | const { close, send, open, status } = useWebSocket(config.server, { |
| 68 | 109 | onConnected() { |
| 69 | 110 | if (waitSendQueue.length) { |
| ... | ... | @@ -80,11 +121,14 @@ export function useSocketConnect(dataSourceRef: Ref<DataBoardLayoutInfo[]>) { |
| 80 | 121 | if (isNullAndUnDef(subscriptionId)) return; |
| 81 | 122 | const mappingRecord = cmdIdMapping.get(subscriptionId); |
| 82 | 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 | 132 | } catch (error) { |
| 89 | 133 | throw Error(error as string); |
| 90 | 134 | } |
| ... | ... | @@ -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 | 142 | cmdIdMapping.set(cmdId, record); |
| 99 | 143 | }; |
| 100 | 144 | |
| 101 | 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 | 147 | return { |
| 130 | - tsSubCmds: messageList, | |
| 148 | + tsSubCmds: generateGroupMessage(), | |
| 131 | 149 | } as SocketMessage; |
| 132 | 150 | }; |
| 133 | 151 | ... | ... |