@@ -121,29 +121,51 @@ const connect = options => new Promise((resolve, reject) => {
121
121
}
122
122
123
123
const propertyValue = CBOR . decode ( buf ) ;
124
+ const propertyNameId = 0 ;
125
+ const attributeNameId = 1 ;
126
+
127
+ let valueToSend = { } ;
128
+ let propertyNameKeyPrevious = '' ;
124
129
propertyValue . forEach ( ( p ) => {
125
130
// Support cbor labels
126
- const propertyNameKey = p . n !== undefined ? p . n : p [ '0' ] ;
131
+ let propertyNameKey = p . n !== undefined ? p . n : p [ '0' ] ;
132
+ const propertyNameKeySplit = propertyNameKey . split ( ':' ) ;
133
+
127
134
const valueKey = p . v !== undefined ? 'v' : '2' ;
128
135
const valueStringKey = p . vs !== undefined ? 'vs' : '3' ;
129
136
const valueBooleanKey = p . vb !== undefined ? 'vb' : '4' ;
137
+ let value ;
138
+ propertyNameKey = propertyNameKeySplit [ propertyNameId ] ;
130
139
if ( propertyCallback [ msg . topic ] [ propertyNameKey ] ) {
131
- let value = null ;
132
-
133
140
if ( ! ( p [ valueKey ] === undefined ) ) {
134
141
value = p [ valueKey ] ;
135
142
} else if ( ! ( p [ valueStringKey ] === undefined ) ) {
136
143
value = p [ valueStringKey ] ;
137
144
} else if ( ! ( p [ valueBooleanKey ] === undefined ) ) {
138
145
value = p [ valueBooleanKey ] ;
139
146
}
140
-
141
- propertyCallback [ msg . topic ] [ propertyNameKey ] ( value ) ;
147
+ }
148
+ if ( propertyNameKeyPrevious === '' ) {
149
+ propertyNameKeyPrevious = propertyNameKeySplit [ propertyNameId ] ;
150
+ }
151
+ if ( propertyNameKeyPrevious !== propertyNameKey ) {
152
+ propertyCallback [ msg . topic ] [ propertyNameKeyPrevious ] ( valueToSend ) ;
153
+ propertyNameKeyPrevious = propertyNameKey ;
154
+ valueToSend = { } ;
155
+ }
156
+ if ( propertyNameKeySplit . length === 1 ) {
157
+ valueToSend = value ;
158
+ } else {
159
+ const attributeName = propertyNameKeySplit [ attributeNameId ] ;
160
+ valueToSend [ attributeName ] = value ;
142
161
}
143
162
} ) ;
163
+ if ( valueToSend !== { } ) {
164
+ propertyCallback [ msg . topic ] [ propertyNameKeyPrevious ] ( valueToSend ) ;
165
+ }
144
166
}
145
167
} ;
146
-
168
+
147
169
client . onConnected = ( reconnect ) => {
148
170
if ( reconnect === true ) {
149
171
// This is a re-connection: re-subscribe to all topics subscribed before the
0 commit comments