1313from core .router import Router
1414from core .orm import writeHits
1515from core .i18n import locale
16- from typing import List , Any
16+ from typing import List , Any , Union
1717from aiohttp import web , ClientResponseError
1818from urllib .parse import urljoin
1919from tqdm import tqdm
@@ -53,7 +53,7 @@ def __init__(self) -> None:
5353 if not self .id or not self .secret :
5454 raise ClusterIdNotSetError if not self .id else ClusterSecretNotSetError
5555
56- async def fetchToken (self ):
56+ async def fetchToken (self ) -> None :
5757 logger .tinfo ("token.info.fetching" )
5858 async with aiohttp .ClientSession (
5959 self .base_url , headers = {"User-Agent" : self .user_agent }
@@ -100,15 +100,15 @@ def __init__(self) -> None:
100100 self .filelist = FileList (files = [])
101101 self .storages = getStorages ()
102102 self .configuration = None
103- self .semaphore = None
104- self .socket = None
105- self .router = None
103+ self .semaphore = asyncio . Semaphore ()
104+ self .socket = socketio . AsyncClient ( handle_sigint = False )
105+ self .router : Router | None = None
106106 self .runner = None
107107 self .failed_filelist = FileList (files = [])
108108 self .enabled = False
109109 self .site = None
110110 self .want_enable = False
111- self .scheduler = None
111+ self .scheduler = scheduler
112112 self .start_time = int (time .time () * 1000 )
113113
114114 async def fetchFileList (self ) -> None :
@@ -227,7 +227,6 @@ async def recycleFiles(self) -> None:
227227 async def downloadFile (
228228 self , file : FileInfo , session : aiohttp .ClientSession , pbar : tqdm
229229 ) -> None :
230- # logger.debug(file)
231230 async with self .semaphore :
232231 delay , retry = Config .get ("advanced.delay" ), Config .get ("advanced.retry" )
233232
@@ -255,7 +254,7 @@ async def downloadFile(
255254 e = e .message ,
256255 retry = delay ,
257256 )
258- self .report (e , session )
257+ await self .report (e , session )
259258
260259 except Exception as e :
261260 logger .terror (
@@ -273,7 +272,7 @@ async def downloadFile(
273272 async def report (
274273 self , error : ClientResponseError , session : aiohttp .ClientSession
275274 ) -> None :
276- history_urls = [urljoin ( self . base_url ), * error .history ]
275+ history_urls = [* error .history ]
277276 try :
278277 async with session .post (
279278 "/openbmclapi/report" ,
@@ -402,6 +401,10 @@ async def keepAlive(self) -> bool:
402401 logger .terror ("cluster.error.keep_alive.socket_not_setup" )
403402 return False
404403
404+ if self .router is None :
405+ logger .terror ("cluster.error.keep_alive.router_not_setup" )
406+ return False
407+
405408 future = asyncio .Future ()
406409
407410 async def callback (data : List [Any ]):
@@ -482,28 +485,22 @@ async def callback(data: List[Any]):
482485 async def connect (self ) -> None :
483486 if self .socket and self .socket .connected :
484487 return
485-
486- self .socket = socketio .AsyncClient (handle_sigint = False )
487-
488- @self .socket .on ("connect" )
489- async def _ () -> None :
488+ async def onConnect () -> None :
490489 logger .tsuccess ("client.success.connected" )
491490 await self .disable ()
492491 if self .want_enable :
493492 await self .enable ()
494493 if self .scheduler :
495494 self .scheduler .resume ()
496-
497- @self .socket .on ("disconnect" )
498- async def _ () -> None :
495+ async def onDisconnect () -> None :
499496 logger .twarning ("client.warn.disconnected" )
500497 if self .scheduler :
501498 self .scheduler .pause ()
502-
503- @self .socket .on ("message" )
504- async def _ (message : str ) -> None :
499+ async def onMessage (message : str ) -> None :
505500 logger .tinfo ("client.info.message" , message = message )
506-
501+ self .socket .on ("connect" , onConnect )
502+ self .socket .on ("disconnect" , onDisconnect )
503+ self .socket .on ("message" , onMessage )
507504 await self .socket .connect (
508505 self .base_url ,
509506 transports = ["websocket" ],
0 commit comments