package Ġcom . example . music player . logic . network Ċ Ċ import Ġcom . example . music player . logic . model . Online Play Url Response Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Callback Ċ import Ġretrofit 2 . Response Ċ import Ġretrofit 2 . await Ċ import Ġjava . lang . RuntimeException Ċ import Ġkotlin . coroutines . resume Ċ import Ġkotlin . coroutines . resume With Exception Ċ import Ġkotlin . coroutines . suspend Coroutine Ċ Ċ object ĠNetwork Ġ{ ĊĠĠĠ Ġ// Ġ èİ·å¾Ĺ music Service åĬ¨æĢģ ä»£çĲĨ å¯¹è±¡ ĊĠĠĠ Ġprivate Ġval Ġmusic Service Ġ= ĠService Creator . create < Music Service >() ĊĠĠĠ Ġ// Ġsuspend Ġ åįı ç¨ĭ åħ³éĶ®åŃĹ Ġåı¯ åģľæŃ¢ çļĦæĸ¹æ³ķ Ġ è°ĥçĶ¨ place Service å¯¹è±¡ æĸ¹æ³ķ ĊĠĠĠ Ġ// Ġawait æĸ¹æ³ķ Ġåľ¨ åįı ç¨ĭ æĸ¹æ³ķ ç»ĵæĿŁ åīį éĺ» å¡ŀ è°ĥçĶ¨ çļĦ çº¿ç¨ĭ ĊĠĠĠ Ġsuspend Ġfun Ġsearch Music ( query : ĠString ) Ġ= Ġmusic Service . search Music ( query ). await () ĊĊĠĠĠ Ġsuspend Ġfun Ġget Online Play Url ( id : ĠString ) Ġ= Ġmusic Service . get Online Play Url ( id ). await () ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġ< T > ĠCall < T >. await (): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsuspend Coroutine Ġåı¯ä»¥ è¿ĶåĽŀ åįı ç¨ĭ ä¸ŃçļĦ æķ°æį® ĊĠĠĠĠĠĠĠ Ġreturn Ġsuspend Coroutine Ġ{ Ġcontinuation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenqueue ( object Ġ: ĠCallback < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall < T >, Ġresponse : ĠResponse < T >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġresponse . body () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( body Ġ!= Ġnull ) Ġcontinuation . resume ( body ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġcontinuation . resume With Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRuntimeException (" response Ġbody Ġis Ġnull ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < T >, Ġt : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume With Exception ( t ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }