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 discord import Client
from discord import Client, Guild
from discord.ext import commands
from .pool import NodePool

View File

@ -58,6 +58,7 @@ class Node:
identifier: str,
secure: bool = False,
heartbeat: int = 30,
loop: Optional[asyncio.AbstractEventLoop] = None,
session: Optional[aiohttp.ClientSession] = None,
spotify_client_id: Optional[str] = None,
spotify_client_secret: Optional[str] = None,
@ -74,7 +75,7 @@ class Node:
self._heartbeat: int = heartbeat
self._secure: bool = secure
self.fallback: bool = fallback
self._version: str = None
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._websocket = None
self._task: asyncio.Task = None
self._loop: asyncio.AbstractEventLoop = loop or asyncio.get_event_loop()
self._session_id: str = None
self._available: bool = False
self._version: str = None
self._route_planner = RoutePlanner(self)
@ -195,9 +198,9 @@ class Node:
retry = backoff.delay()
await asyncio.sleep(retry)
if not self.is_connected:
self._bot.loop.create_task(self.connect())
self._loop.create_task(self.connect())
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):
op = data.get("op", None)
@ -291,7 +294,7 @@ class Node:
)
if not self._task:
self._task = self._bot.loop.create_task(self._listen())
self._task = self._loop.create_task(self._listen())
self._available = True
return self
@ -689,6 +692,7 @@ class NodePool:
identifier: str,
secure: bool = False,
heartbeat: int = 30,
loop: Optional[asyncio.AbstractEventLoop] = None,
spotify_client_id: Optional[str] = None,
spotify_client_secret: Optional[str] = None,
session: Optional[aiohttp.ClientSession] = None,
@ -705,7 +709,7 @@ class NodePool:
node = Node(
pool=cls, bot=bot, host=host, port=port, password=password,
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,
apple_music=apple_music, fallback=fallback
)