Spaces:
Runtime error
Runtime error
File size: 2,789 Bytes
ad8032f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# RockPaperScissor/game_cache/memory_cache.py
from typing import Dict, Any, Optional
from dataclasses import dataclass
from datetime import datetime
@dataclass
class GameData:
session_id: str
player_move: str
ai_move: str
result: str
ai_type: str
ai_state: Dict[str, Any]
created_at: datetime = datetime.now()
class GameSessionCache:
def __init__(self):
self._sessions: Dict[str, Dict[str, Any]] = {}
self._max_cache_size = 1000 # Maximum number of sessions to cache
def update_session(self, session_id: str, game_data: Dict[str, Any]) -> None:
"""Update session data in cache"""
if session_id not in self._sessions:
self._sessions[session_id] = {
'total_rounds': 0,
'player_wins': 0,
'ai_wins': 0,
'draws': 0,
'rounds': [],
'last_updated': datetime.now()
}
session = self._sessions[session_id]
# Update session stats
session['total_rounds'] += 1
if game_data['result'] == 'player_win':
session['player_wins'] += 1
elif game_data['result'] == 'ai_win':
session['ai_wins'] += 1
else:
session['draws'] += 1
# Add round data
session['rounds'].append({
'round_number': session['total_rounds'],
'player_move': game_data['player_move'],
'ai_move': game_data['ai_move'],
'result': game_data['result'],
'ai_type': game_data.get('ai_type', 'random'),
'ai_state': game_data.get('ai_state', {}),
'created_at': datetime.now()
})
# Update last updated timestamp
session['last_updated'] = datetime.now()
# Enforce cache size limit
if len(self._sessions) > self._max_cache_size:
self._remove_oldest_session()
def get_session(self, session_id: str) -> Optional[Dict[str, Any]]:
"""Get session data from cache"""
return self._sessions.get(session_id)
def _remove_oldest_session(self) -> None:
"""Remove the oldest session from cache"""
if not self._sessions:
return
oldest_session = min(
self._sessions.items(),
key=lambda x: x[1]['last_updated']
)
del self._sessions[oldest_session[0]]
def clear(self) -> None:
"""Clear all cached data"""
self._sessions.clear()
def remove_session(self, session_id: str) -> None:
"""Remove a specific session from cache"""
if session_id in self._sessions:
del self._sessions[session_id] |