Spaces:
Runtime error
Runtime error
da03
commited on
Commit
·
274b099
1
Parent(s):
2b99d5a
- main.py +30 -0
- static/index.html +18 -0
main.py
CHANGED
|
@@ -235,6 +235,30 @@ async def websocket_endpoint(websocket: WebSocket):
|
|
| 235 |
input_queue = asyncio.Queue()
|
| 236 |
is_processing = False
|
| 237 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 238 |
async def process_input(data):
|
| 239 |
nonlocal previous_frame, hidden_states, keys_down, frame_num, frame_count, is_processing
|
| 240 |
|
|
@@ -377,6 +401,12 @@ async def websocket_endpoint(websocket: WebSocket):
|
|
| 377 |
await websocket.send_json({"type": "heartbeat_response"})
|
| 378 |
continue
|
| 379 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 380 |
# Add the input to our queue
|
| 381 |
await input_queue.put(data)
|
| 382 |
print(f"[{receive_time:.3f}] Received input. Queue size now: {input_queue.qsize()}")
|
|
|
|
| 235 |
input_queue = asyncio.Queue()
|
| 236 |
is_processing = False
|
| 237 |
|
| 238 |
+
# Add a function to reset the simulation
|
| 239 |
+
async def reset_simulation():
|
| 240 |
+
nonlocal previous_frame, hidden_states, keys_down, frame_num, is_processing, input_queue
|
| 241 |
+
|
| 242 |
+
# Clear the input queue
|
| 243 |
+
while not input_queue.empty():
|
| 244 |
+
try:
|
| 245 |
+
input_queue.get_nowait()
|
| 246 |
+
input_queue.task_done()
|
| 247 |
+
except asyncio.QueueEmpty:
|
| 248 |
+
break
|
| 249 |
+
|
| 250 |
+
# Reset all state variables
|
| 251 |
+
previous_frame = padding_image
|
| 252 |
+
hidden_states = None
|
| 253 |
+
keys_down = set()
|
| 254 |
+
frame_num = -1
|
| 255 |
+
is_processing = False
|
| 256 |
+
|
| 257 |
+
print(f"[{time.perf_counter():.3f}] Simulation reset to initial state")
|
| 258 |
+
|
| 259 |
+
# Send confirmation to client
|
| 260 |
+
await websocket.send_json({"type": "reset_confirmed"})
|
| 261 |
+
|
| 262 |
async def process_input(data):
|
| 263 |
nonlocal previous_frame, hidden_states, keys_down, frame_num, frame_count, is_processing
|
| 264 |
|
|
|
|
| 401 |
await websocket.send_json({"type": "heartbeat_response"})
|
| 402 |
continue
|
| 403 |
|
| 404 |
+
# Handle reset command
|
| 405 |
+
if data.get("type") == "reset":
|
| 406 |
+
print(f"[{receive_time:.3f}] Received reset command")
|
| 407 |
+
await reset_simulation()
|
| 408 |
+
continue
|
| 409 |
+
|
| 410 |
# Add the input to our queue
|
| 411 |
await input_queue.put(data)
|
| 412 |
print(f"[{receive_time:.3f}] Received input. Queue size now: {input_queue.qsize()}")
|
static/index.html
CHANGED
|
@@ -14,6 +14,9 @@
|
|
| 14 |
<body>
|
| 15 |
<canvas id="displayCanvas" width="512" height="384"></canvas>
|
| 16 |
|
|
|
|
|
|
|
|
|
|
| 17 |
<script>
|
| 18 |
const canvas = document.getElementById('displayCanvas');
|
| 19 |
const ctx = canvas.getContext('2d');
|
|
@@ -61,6 +64,9 @@
|
|
| 61 |
//isProcessing = false; // Reset the processing flag when we get a response
|
| 62 |
};
|
| 63 |
img.src = 'data:image/png;base64,' + data.image;
|
|
|
|
|
|
|
|
|
|
| 64 |
}
|
| 65 |
};
|
| 66 |
}
|
|
@@ -212,6 +218,18 @@
|
|
| 212 |
}
|
| 213 |
}
|
| 214 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 215 |
</script>
|
| 216 |
</body>
|
| 217 |
</html>
|
|
|
|
| 14 |
<body>
|
| 15 |
<canvas id="displayCanvas" width="512" height="384"></canvas>
|
| 16 |
|
| 17 |
+
<!-- Add this button somewhere in your UI, perhaps near other controls -->
|
| 18 |
+
<button id="resetButton" class="control-button">Reset Simulation</button>
|
| 19 |
+
|
| 20 |
<script>
|
| 21 |
const canvas = document.getElementById('displayCanvas');
|
| 22 |
const ctx = canvas.getContext('2d');
|
|
|
|
| 64 |
//isProcessing = false; // Reset the processing flag when we get a response
|
| 65 |
};
|
| 66 |
img.src = 'data:image/png;base64,' + data.image;
|
| 67 |
+
} else if (data.type === "reset_confirmed") {
|
| 68 |
+
console.log("Simulation reset confirmed by server");
|
| 69 |
+
// Optionally update UI to reflect reset state
|
| 70 |
}
|
| 71 |
};
|
| 72 |
}
|
|
|
|
| 218 |
}
|
| 219 |
}
|
| 220 |
});
|
| 221 |
+
|
| 222 |
+
// Add event listener for the reset button
|
| 223 |
+
document.getElementById('resetButton').addEventListener('click', function() {
|
| 224 |
+
if (socket && socket.readyState === WebSocket.OPEN) {
|
| 225 |
+
console.log("Sending reset command to server");
|
| 226 |
+
socket.send(JSON.stringify({
|
| 227 |
+
type: "reset"
|
| 228 |
+
}));
|
| 229 |
+
} else {
|
| 230 |
+
console.error("WebSocket not connected, cannot reset");
|
| 231 |
+
}
|
| 232 |
+
});
|
| 233 |
</script>
|
| 234 |
</body>
|
| 235 |
</html>
|