Skip to content

Commit b242e26

Browse files
committed
Added example usage of StateRecorderJS
1 parent c2bff9a commit b242e26

File tree

1 file changed

+32
-1
lines changed

1 file changed

+32
-1
lines changed

Examples/snapshot.html

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,38 @@
3939
const snapshots = [];
4040
const buttons = [document.getElementById('tick-0'), document.getElementById('tick-1'), document.getElementById('tick-2'), document.getElementById('tick-3')]
4141
buttons.forEach((e, i) => {
42-
snapshots.push(new Jolt.StateRecorderImpl());
42+
if ((i & 1) == 0) {
43+
// Use StateRecorderImpl to save/restore the state
44+
snapshots.push(new Jolt.StateRecorderImpl());
45+
} else {
46+
// Use StateRecorderJS to allow saving/restoring state to a custom buffer that can e.g. be sent over the network
47+
let recorder = new Jolt.StateRecorderJS();
48+
recorder.buffer = new ArrayBuffer(100 * 1024); // Left out resizing logic for simplicity
49+
recorder.writePos = 0;
50+
recorder.readPos = 0;
51+
recorder.ReadBytes = (data, size) => {
52+
let d = new Uint8Array(Jolt.HEAP8.buffer, data, size);
53+
for (let j = 0; j < size; j++) {
54+
d[j] = recorder.buffer[recorder.readPos++];
55+
}
56+
};
57+
recorder.WriteBytes = (data, size) => {
58+
let d = new Uint8Array(Jolt.HEAP8.buffer, data, size);
59+
for (let j = 0; j < size; j++) {
60+
recorder.buffer[recorder.writePos++] = d[j];
61+
}
62+
};
63+
recorder.IsEOF = () => {
64+
return recorder.readPos >= recorder.writePos;
65+
};
66+
recorder.IsFailed = () => {
67+
return false;
68+
};
69+
recorder.Rewind = () => {
70+
recorder.readPos = 0;
71+
};
72+
snapshots.push(recorder);
73+
}
4374
e.isSet = false;
4475
e.addEventListener('click', () => {
4576
if (e.disabled == false) {

0 commit comments

Comments
 (0)