Commit 026fd0f4fe1ddfa65ef757594919edd18d403fcd

Authored by ww
1 parent 4e663db6

perf: visual board socket subscribe message

... ... @@ -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
... ...