@@ -174,6 +174,7 @@ def __init__(
174174 on_startup = [self .event_startup ],
175175 )
176176 self ._closing : bool = False
177+ self ._server : uvicorn .Server | None = None
177178
178179 def __repr__ (self ) -> str :
179180 return f"StarletteAdapter(host={ self ._host } , port={ self ._port } )"
@@ -215,7 +216,11 @@ async def close(self, with_client: bool = True) -> None:
215216 if with_client :
216217 await self .client .close ()
217218
219+ if self ._server :
220+ await self ._server .shutdown ()
221+
218222 logger .info ("Successfully shutdown TwitchIO <%s>." , self .__class__ .__qualname__ )
223+ self ._closing = False
219224
220225 def _task_callback (self , task : asyncio .Task [None ]) -> None :
221226 if not task .done ():
@@ -243,8 +248,10 @@ async def run(self, host: str | None = None, port: int | None = None) -> None:
243248 timeout_graceful_shutdown = 3 ,
244249 )
245250
246- server : uvicorn .Server = uvicorn .Server (config )
247- self ._runner_task = asyncio .create_task (server .serve (), name = f"twitchio-web-adapter:{ self .__class__ .__qualname__ } " )
251+ self ._server = uvicorn .Server (config )
252+ self ._runner_task = asyncio .create_task (
253+ self ._server .serve (), name = f"twitchio-web-adapter:{ self .__class__ .__qualname__ } "
254+ )
248255 self ._runner_task .add_done_callback (self ._task_callback )
249256
250257 async def eventsub_callback (self , request : Request ) -> Response :
0 commit comments