package Ġio . ag ora . ag or au ikit _ android Ċ Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . Request Ċ import Ġorg . json . JSONException Ċ import Ġorg . json . JSONObject Ċ import Ġjava . io . IOException Ċ import Ġjava . util . logging . Level Ċ import Ġjava . util . logging . Logger Ċ Ċ public Ġinterface ĠToken Callback Ġ{ ĊĠĠĠ Ġfun ĠonSuccess ( token : ĠString ) ĊĠĠĠ Ġfun ĠonError ( error : ĠToken Error ) Ċ } Ċ Ċ /** Ċ Ġ* ĠError Ġtypes Ġto Ġexpect Ġfrom Ġfetch Token Ġon Ġfailing Ġot Ġretrieve Ġvalid Ġtoken . Ċ Ġ*/ Ċ enum Ġclass ĠToken Error Ġ{ ĊĠĠĠ ĠNO DATA , ĠINVALID DATA , ĠINVALID URL Ċ } Ċ Ċ /** Ċ Ġ* ĠRequests Ġthe Ġtoken Ġfrom Ġour Ġbackend Ġtoken Ġservice Ċ Ġ* Ġ@ param Ġurl Base : Ġbase ĠURL Ġspecifying Ġwhere Ġthe Ġtoken Ġserver Ġis Ġlocated Ċ Ġ* Ġ@ param Ġchannel Name : ĠName Ġof Ġthe Ġchannel Ġwe 're Ġrequesting Ġfor Ċ Ġ* Ġ@ param ĠuserId : ĠUser ĠID Ġof Ġthe Ġuser Ġtrying Ġto Ġjoin Ġ( 0 Ġfor Ġany Ġuser ) Ċ Ġ* Ġ@ param Ġcallback : ĠCallback Ġmethod Ġfor Ġreturning Ġeither Ġthe Ġstring Ġtoken Ġor Ġerror Ċ Ġ*/ Ċ @ Experimental Unsigned Types Ċ fun ĠA gor a Video Viewer . Companion . fetch Token ( url Base : ĠString , Ġchannel Name : ĠString , ĠuserId : ĠInt , Ġcompletion : ĠToken Callback ) Ġ{ ĊĠĠĠ Ġval Ġlog : ĠLogger Ġ= ĠLogger . getLogger (" Ag ora UIKit ") ĊĠĠĠ Ġval Ġclient Ġ= ĠOk HttpClient () ĊĠĠĠ Ġval Ġurl Ġ= Ġ"$ url Base / rtc /$ channel Name / publisher / uid /$ userId /" ĊĠĠĠ Ġval Ġrequest : Ġokhttp 3 . Request Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. method (" GET ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġclient . new Call ( request ). execute (). use Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! response . is Successful ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . log ( Level . WARNING , Ġ" Unexpected Ġcode Ġ$ response ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion . onError ( Token Error . INVALID DATA ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body ()?. string ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġj Object Ġ= ĠJSONObject ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġj Object . getString (" rtc Token ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! token . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion . on Success ( token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion . onError ( Token Error . NO DATA ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . log ( Level . WARNING , Ġe . localized Message ) ĊĠĠĠĠĠĠĠ Ġcompletion . onError ( Token Error . INVALID URL ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠJSON Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . log ( Level . WARNING , Ġe . localized Message ) ĊĠĠĠĠĠĠĠ Ġcompletion . onError ( Token Error . INVALID DATA ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Experimental Unsigned Types Ċ internal Ġfun ĠA gor a Video Viewer . fetch Renew Token () Ġ{ ĊĠĠĠ Ġ( this . ag ora Settings . token URL )?. let Ġ{ Ġtoken URL Ġ-> ĊĠĠĠĠĠĠĠ Ġthis . connection Data . channel ?. let Ġ{ Ġchannel Name Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallback : ĠToken Callback Ġ= Ġobject Ġ: ĠToken Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( token : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ fetch Renew Token . ag kit . renew Token ( token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( error : ĠToken Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . getLogger (" Ag ora UIKit ", Ġerror . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠA gor a Video Viewer . fetch Token ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken URL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . userID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ