algoscienceacademy's picture
cogenbai
bd91486
Raw
History Blame Contribute Delete
1.63 kB
from typing import Dict, Set, Optional
from dataclasses import dataclass, field
from datetime import datetime
import asyncio
import json
@dataclass
class CodeSession:
id: str
code: str = ""
language: str = "python"
participants: Set[str] = field(default_factory=set)
created_at: datetime = field(default_factory=datetime.now)
def to_dict(self) -> dict:
return {
"id": self.id,
"code": self.code,
"language": self.language,
"participants": list(self.participants),
"created_at": self.created_at.isoformat()
}
class SessionManager:
def __init__(self):
self.sessions: Dict[str, CodeSession] = {}
self.user_connections: Dict[str, Set[str]] = {}
async def create_session(self, session_id: str, creator: str) -> CodeSession:
session = CodeSession(id=session_id)
session.participants.add(creator)
self.sessions[session_id] = session
return session
async def join_session(self, session_id: str, user_id: str) -> Optional[CodeSession]:
if session := self.sessions.get(session_id):
session.participants.add(user_id)
if user_id not in self.user_connections:
self.user_connections[user_id] = set()
self.user_connections[user_id].add(session_id)
return session
return None
async def update_code(self, session_id: str, code: str) -> bool:
if session := self.sessions.get(session_id):
session.code = code
return True
return False