use own abstract event loop to execute tasks

This commit is contained in:
cloudwithax 2023-03-09 23:30:55 -05:00
parent 7b91e717ac
commit d9137f6b29
2 changed files with 10 additions and 6 deletions

View File

@ -1,5 +1,5 @@
from __future__ import annotations from __future__ import annotations
from discord import Client from discord import Client, Guild
from discord.ext import commands from discord.ext import commands
from .pool import NodePool from .pool import NodePool

View File

@ -58,6 +58,7 @@ class Node:
identifier: str, identifier: str,
secure: bool = False, secure: bool = False,
heartbeat: int = 30, heartbeat: int = 30,
loop: Optional[asyncio.AbstractEventLoop] = None,
session: Optional[aiohttp.ClientSession] = None, session: Optional[aiohttp.ClientSession] = None,
spotify_client_id: Optional[str] = None, spotify_client_id: Optional[str] = None,
spotify_client_secret: Optional[str] = None, spotify_client_secret: Optional[str] = None,
@ -74,7 +75,7 @@ class Node:
self._heartbeat: int = heartbeat self._heartbeat: int = heartbeat
self._secure: bool = secure self._secure: bool = secure
self.fallback: bool = fallback self.fallback: bool = fallback
self._version: str = None
self._websocket_uri: str = f"{'wss' if self._secure else 'ws'}://{self._host}:{self._port}" self._websocket_uri: str = f"{'wss' if self._secure else 'ws'}://{self._host}:{self._port}"
@ -83,9 +84,11 @@ class Node:
self._session: Optional[aiohttp.ClientSession] = session self._session: Optional[aiohttp.ClientSession] = session
self._websocket = None self._websocket = None
self._task: asyncio.Task = None self._task: asyncio.Task = None
self._loop: asyncio.AbstractEventLoop = loop or asyncio.get_event_loop()
self._session_id: str = None self._session_id: str = None
self._available: bool = False self._available: bool = False
self._version: str = None
self._route_planner = RoutePlanner(self) self._route_planner = RoutePlanner(self)
@ -195,9 +198,9 @@ class Node:
retry = backoff.delay() retry = backoff.delay()
await asyncio.sleep(retry) await asyncio.sleep(retry)
if not self.is_connected: if not self.is_connected:
self._bot.loop.create_task(self.connect()) self._loop.create_task(self.connect())
else: else:
self._bot.loop.create_task(self._handle_payload(msg.json())) self._loop.create_task(self._handle_payload(msg.json()))
async def _handle_payload(self, data: dict): async def _handle_payload(self, data: dict):
op = data.get("op", None) op = data.get("op", None)
@ -291,7 +294,7 @@ class Node:
) )
if not self._task: if not self._task:
self._task = self._bot.loop.create_task(self._listen()) self._task = self._loop.create_task(self._listen())
self._available = True self._available = True
return self return self
@ -689,6 +692,7 @@ class NodePool:
identifier: str, identifier: str,
secure: bool = False, secure: bool = False,
heartbeat: int = 30, heartbeat: int = 30,
loop: Optional[asyncio.AbstractEventLoop] = None,
spotify_client_id: Optional[str] = None, spotify_client_id: Optional[str] = None,
spotify_client_secret: Optional[str] = None, spotify_client_secret: Optional[str] = None,
session: Optional[aiohttp.ClientSession] = None, session: Optional[aiohttp.ClientSession] = None,
@ -705,7 +709,7 @@ class NodePool:
node = Node( node = Node(
pool=cls, bot=bot, host=host, port=port, password=password, pool=cls, bot=bot, host=host, port=port, password=password,
identifier=identifier, secure=secure, heartbeat=heartbeat, identifier=identifier, secure=secure, heartbeat=heartbeat,
spotify_client_id=spotify_client_id, loop=loop, spotify_client_id=spotify_client_id,
session=session, spotify_client_secret=spotify_client_secret, session=session, spotify_client_secret=spotify_client_secret,
apple_music=apple_music, fallback=fallback apple_music=apple_music, fallback=fallback
) )