1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- from sanic.websocket import WebSocketConnection # type: ignore
- import sqlite3 as sql
- from typing import Dict, List, Optional, Tuple
- class Cache:
- connections: Dict[str, WebSocketConnection]
- def __init__(self):
- self.connections = {}
- def add_connection(self, game: str, ws: WebSocketConnection):
- if game not in self.connections:
- self.connections[game] = set()
- self.connections[game].add(ws)
- def remove_connection(self, game: str, ws: WebSocketConnection):
- if game in self.connections:
- self.connections[game].remove(ws)
- def get_connections(self, game: str) -> List[WebSocketConnection]:
- return self.connections.get(game, [])
- class Storage:
- db: sql.Connection
- def __init__(self):
- self.db = sql.connect('samp.db')
- def get_backlog(self, game: str, c: Optional[sql.Cursor]=None) -> List[Tuple[str, str]]:
- if c is None:
- c = self.db.cursor()
- c.execute('SELECT c.user, c.content '
- 'FROM chat c, games g '
- 'WHERE c.game = g.id AND g.name = ?', [game])
- return list(c)
- def get_game_id(self, game: str, c: Optional[sql.Cursor]=None) -> int:
- if c is None:
- c = self.db.cursor()
- c.execute('SELECT id FROM games WHERE name = ?', [game])
- res = c.fetchone()
- if res is not None:
- return res[0]
- else:
- c.execute('INSERT INTO games (name) VALUES (?)', [game])
- self.db.commit()
- c.execute('SELECT id FROM games WHERE name = ?', [game])
- return c.fetchone()[0]
- def add_msg(self, user: str, content: str, game: str, c: Optional[sql.Cursor]=None):
- if c is None:
- c = self.db.cursor()
- game_id: int = self.get_game_id(game, c)
- c.execute('INSERT INTO chat (game, user, content) '
- 'VALUES (?, ?, ?)', [game_id, user, content])
- self.db.commit()
- def close(self):
- self.db.close()
|