package Ġrx http Ċ Ċ /** Ċ Ġ* ĠUser : Ġl jx Ċ Ġ* ĠDate : Ġ 2 0 2 0 / 3 / 9 Ċ Ġ* ĠTime : Ġ 0 8 : 4 7 Ċ Ġ*/ Ċ import Ġio . reactivex . Observable Ċ import Ġkotlinx . coroutines . suspend C ancellable Coroutine Ċ import Ġokhttp 3 . Call Ċ import Ġokhttp 3 . Callback Ċ import Ġokhttp 3 . Response Ċ import Ġrx http . wrapper . parse . Parser Ċ import Ġrx http . wrapper . utils . Log Util Ċ import Ġjava . io . IOException Ċ import Ġkotlin . coroutines . resume Ċ import Ġkotlin . coroutines . resume With Exception ĊĊ Ċ /** Ċ Ġ* Ġ æīĢæľīçļĦ await X xx æĸ¹æ³ķ , æľĢç»Ī éĥ½ä¼ļ è°ĥçĶ¨ æľ¬ æĸ¹æ³ķ Ċ Ġ*/ Ċ suspend Ġfun Ġ< T > ĠCall . await ( parser : ĠParser < T >): ĠT Ġ{ ĊĠĠĠ Ġreturn Ġsuspend C ancellable Coroutine Ġ{ Ġcontinuation Ġ-> ĊĠĠĠĠĠĠĠ Ġcontinuation . invoke On Cancellation Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcancel () Ġ Ġ// å½ĵåīį çº¿ç¨ĭ åĲĮ åħ³éĹŃ åįı ç¨ĭ æĹ¶çļĦ çº¿ç¨ĭ Ġ å¦Ĥ ï¼ļ A çº¿ç¨ĭ åħ³éĹŃ åįı ç¨ĭ ï¼Į è¿Ļ å½ĵåīį å°± åľ¨ A çº¿ç¨ĭ è°ĥçĶ¨ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġenqueue ( object Ġ: ĠCallback Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall , Ġresponse : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume ( parser . on Parse ( response )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Util . log ( call . request (). url (). toString (), Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume With Exception ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall , Ġe : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Util . log ( call . request (). url (). toString (), Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume With Exception ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ Ċ suspend Ġfun Ġ< T Ġ: ĠAny > ĠObservable < T >. await (): ĠT Ġ{ ĊĠĠĠ Ġreturn Ġsuspend C ancellable Coroutine Ġ{ Ġcontinuation Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġsubscribe Ġ= Ġsubscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume ( it ) ĊĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume With Exception ( it ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġcontinuation . invoke On Cancellation Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscribe . dispose () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ