async def run_server(addr: Address) -> None: glob.version = Version(2, 8, 5) glob.http = aiohttp.ClientSession(json_serialize=orjson.dumps) loop = asyncio.get_event_loop() try: loop.add_signal_handler(signal.SIGINT, loop.stop) loop.add_signal_handler(signal.SIGTERM, loop.stop) except NotImplementedError: pass glob.db = AsyncSQLPoolWrapper() await glob.db.connect(**glob.config.mysql) # create our bot & append it to the global player list. glob.bot = Player(id=1, name='Aika', priv=Privileges.Normal) glob.bot.last_recv_time = 0x7fffffff glob.players.add(glob.bot) # add all channels from db. async for chan in glob.db.iterall('SELECT * FROM channels'): await glob.channels.add(Channel(**chan)) # run background process to # disconnect inactive clients. loop.create_task(disconnect_inactive()) async with AsyncTCPServer(addr) as glob.serv: log(f'Gulag v{glob.version} online!', AnsiRGB(0x00ff7f)) async for conn in glob.serv.listen(glob.config.max_conns): loop.create_task(handle_conn(conn))
async def get_prev_version() -> Optional[Version]: """Get the last launched version of the server.""" res = await glob.db.fetch( 'SELECT ver_major, ver_minor, ver_micro ' 'FROM startups ORDER BY datetime DESC LIMIT 1', _dict=False # get tuple ) if res: return Version(*map(int, res))
from objects import glob __all__ = () """ app - our quart app pertaining to gulag-web. """ app = Quart(__name__) """ app version - current version of gulag-web. """ version = Version(0, 1, 0) """ secret key - used to secure session data. the only semi-sensitive data we store in the session is a user's email address. i recommend using a 2048 character randomly generated string that excludes escape characters. """ app.secret_key = glob.config.secret_key """
import pyfiglet import bcrypt import uuid import time import queue # internal imports from objects import glob # glob = global, server-wide objects will be stored here e.g database handler from constants.countries import country_codes from constants.types import osuTypes import packets from packets import BanchoPacketReader, BanchoPacket, Packets app = Quart(__name__) # handler for webserver :D glob.db = AsyncSQLPool() # define db globally glob.version = Version(0, 0, 8) # set Asahi version, mainly for future updater but also for tracking glob.packets = {} glob.queue = queue.SimpleQueue() def enqueue(b: bytes): glob.queue.put_nowait(b) def dequeue(): try: return glob.queue.get_nowait() except queue.Empty: pass def queue_empty(): return glob.queue.empty()