dj-embe/service/queueManager.py
2023-04-28 01:19:18 +02:00

36 lines
1015 B
Python

from contextlib import asynccontextmanager
from entity import Queue
from framework import Redis
class QueueManager:
def __init__(self, redis: Redis) -> None:
self.redis = redis
self.queues: dict[int, Queue] = {}
@asynccontextmanager
async def __call__(self, guildId: int) -> Queue:
#await self.acquire(guildId)
queue = await self.get(guildId)
yield queue
await self.save(guildId)
#await self.release(guildId)
async def acquire(self, guildId: int) -> None:
await self.redis.acquire(guildId)
async def release(self, guildId: int) -> None:
await self.redis.release(guildId)
async def get(self, guildId: int) -> Queue:
queue: Queue | None = await self.redis.get(guildId)
if queue is None:
queue = Queue()
self.queues[guildId] = queue
return self.queues[guildId]
async def save(self, guildId: int) -> None:
await self.redis.set(guildId, self.queues[guildId])