Merge pull request #439 from Synthesia-Technologies/feat/deterministic-update-encoding

Make encodeStateAsUpdate deterministic
This commit is contained in:
Kevin Jahns 2023-02-21 10:59:31 +01:00 committed by GitHub
commit 58b754950e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -219,17 +219,21 @@ export const createDeleteSetFromStructStore = ss => {
*/ */
export const writeDeleteSet = (encoder, ds) => { export const writeDeleteSet = (encoder, ds) => {
encoding.writeVarUint(encoder.restEncoder, ds.clients.size) encoding.writeVarUint(encoder.restEncoder, ds.clients.size)
ds.clients.forEach((dsitems, client) => {
encoder.resetDsCurVal() // Ensure that the delete set is written in a deterministic order
encoding.writeVarUint(encoder.restEncoder, client) Array.from(ds.clients.entries())
const len = dsitems.length .sort((clientA, clientB) => clientA[0] - clientB[0])
encoding.writeVarUint(encoder.restEncoder, len) .forEach(([client, dsitems]) => {
for (let i = 0; i < len; i++) { encoder.resetDsCurVal()
const item = dsitems[i] encoding.writeVarUint(encoder.restEncoder, client)
encoder.writeDsClock(item.clock) const len = dsitems.length
encoder.writeDsLen(item.len) encoding.writeVarUint(encoder.restEncoder, len)
} for (let i = 0; i < len; i++) {
}) const item = dsitems[i]
encoder.writeDsClock(item.clock)
encoder.writeDsLen(item.len)
}
})
} }
/** /**