|
39 | 39 | const snapshots = []; |
40 | 40 | const buttons = [document.getElementById('tick-0'), document.getElementById('tick-1'), document.getElementById('tick-2'), document.getElementById('tick-3')] |
41 | 41 | 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 | + } |
43 | 74 | e.isSet = false; |
44 | 75 | e.addEventListener('click', () => { |
45 | 76 | if (e.disabled == false) { |
|
0 commit comments