Esempio n. 1
0
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))
Esempio n. 2
0
    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))
Esempio n. 3
0
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



"""
Esempio n. 4
0
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()