npc0 commited on
Commit
995a7e7
·
verified ·
1 Parent(s): fb3f82e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +32 -29
app.py CHANGED
@@ -8,7 +8,7 @@ import sqlite3
8
  import json
9
  import random
10
  import time
11
- from datetime import datetime
12
  from typing import Dict, List, Optional, Tuple
13
  from dataclasses import dataclass, asdict
14
  from enum import Enum
@@ -252,39 +252,42 @@ class GameDatabase:
252
  print(f"🎮 Game started in room {room_id}!")
253
 
254
  def cleanup_old_rooms(self):
255
- """Remove empty or stale rooms (no activity for 1 day)"""
256
  with self.lock, self.get_connection() as conn:
257
- cutoff_time = datetime.now().timestamp() - 86400 # 24 hours ago
258
-
259
- # Find stale rooms
260
- stale_rooms = conn.execute("""
261
- SELECT room_id FROM rooms
262
- WHERE status = 'waiting'
263
- AND strftime('%s', created_at) < ?
264
- """, (cutoff_time,)).fetchall()
265
-
266
- # Also find empty rooms (no players after 1 hour)
267
- empty_cutoff = datetime.now().timestamp() - 3600 # 1 hour ago
268
- empty_rooms = conn.execute("""
269
- SELECT r.room_id FROM rooms r
270
- LEFT JOIN players p ON r.room_id = p.room_id
271
- WHERE r.status = 'waiting'
272
- AND p.room_id IS NULL
273
- AND strftime('%s', r.created_at) < ?
274
- """, (empty_cutoff,)).fetchall()
275
-
276
- rooms_to_delete = set(
277
- [r['room_id'] for r in stale_rooms] +
278
- [r['room_id'] for r in empty_rooms]
279
  )
280
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
281
  for room_id in rooms_to_delete:
282
- # Delete associated data
283
  conn.execute("DELETE FROM players WHERE room_id = ?", (room_id,))
284
  conn.execute("DELETE FROM spectators WHERE room_id = ?", (room_id,))
285
- conn.execute("DELETE FROM rooms WHERE room_id = ?", (room_id,))
286
- print(f"🧹 Cleaned up stale room: {room_id}")
287
-
288
  conn.commit()
289
  return len(rooms_to_delete)
290
 
 
8
  import json
9
  import random
10
  import time
11
+ from datetime import datetime, timedelta
12
  from typing import Dict, List, Optional, Tuple
13
  from dataclasses import dataclass, asdict
14
  from enum import Enum
 
252
  print(f"🎮 Game started in room {room_id}!")
253
 
254
  def cleanup_old_rooms(self):
255
+ """Remove empty or stale rooms."""
256
  with self.lock, self.get_connection() as conn:
257
+ # Using ISO 8601 format for comparisons
258
+ stale_cutoff = (datetime.now() - timedelta(hours=24)).isoformat()
259
+ empty_cutoff = (datetime.now() - timedelta(hours=1)).isoformat()
260
+
261
+ # Find rooms waiting for more than 24 hours
262
+ stale_rooms_q = conn.execute(
263
+ "SELECT room_id FROM rooms WHERE status = 'waiting' AND created_at < ?",
264
+ (stale_cutoff,)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
265
  )
266
+ stale_ids = {row['room_id'] for row in stale_rooms_q.fetchall()}
267
+
268
+ # Find rooms waiting for more than 1 hour with no players
269
+ empty_rooms_q = conn.execute(
270
+ """
271
+ SELECT room_id FROM rooms
272
+ WHERE status = 'waiting'
273
+ AND created_at < ?
274
+ AND room_id NOT IN (SELECT DISTINCT room_id FROM players WHERE room_id IS NOT NULL)
275
+ """,
276
+ (empty_cutoff,)
277
+ )
278
+ empty_ids = {row['room_id'] for row in empty_rooms_q.fetchall()}
279
+
280
+ rooms_to_delete = stale_ids.union(empty_ids)
281
+
282
+ if not rooms_to_delete:
283
+ return 0
284
+
285
  for room_id in rooms_to_delete:
286
+ conn.execute("DELETE FROM rooms WHERE room_id = ?", (room_id,))
287
  conn.execute("DELETE FROM players WHERE room_id = ?", (room_id,))
288
  conn.execute("DELETE FROM spectators WHERE room_id = ?", (room_id,))
289
+ print(f"🧹 Cleaned up stale/empty room: {room_id}")
290
+
 
291
  conn.commit()
292
  return len(rooms_to_delete)
293