package Ġdev . mf az io . bg g . api . repositories Ċ Ċ import Ġdev . mf az io . bg g . api . extensions . toInt Ċ import Ġdev . mf az io . bg g . api . model . remote . collection . B GG Item Collection Remote Ċ import Ġdev . mf az io . bg g . api . model . remote . play s . B GG Play List Remote Ċ import Ġdev . mf az io . bg g . api . model . remote . thing . B GG Thing Collection Remote Ċ import Ġdev . mf az io . bg g . api . model . remote . thing . B GG Thing Remote Ċ import Ġdev . mf az io . bg g . api . services . B GG Thing Poll Visitor Ċ import Ġdev . mf az io . bg g . api . services . B GG XML Service Ċ import Ġdev . mf az io . bg g . api . services . getDefault B GG XML Service Ċ import Ġkotlinx . coroutines . delay Ċ import Ġorg . simple framework . xml . core . Pers ister Ċ import Ġorg . simple framework . xml . strategy . Visitor Strategy Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Callback Ċ import Ġretrofit 2 . Response Ċ import Ġkotlin . coroutines . resume Ċ import Ġkotlin . coroutines . suspend Coroutine Ċ Ċ class ĠB GG XML Service Repository Impl ( ĊĠĠĠ Ġprivate Ġval Ġb gg Service : ĠB GG XML Service Ġ= ĠgetDefault B GG XML Service () Ċ ) Ġ: ĠB GG XML Service Repository Ġ{ ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Collection ForUser ( userName : ĠString , Ġis Owned : ĠBoolean , Ġis Brief : ĠBoolean , Ġretry Delay : ĠLong ?): ĠB GG Item Collection Remote ? Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" At tempting Ġto Ġload Ġcollection Ġfor Ġ$ userName ") ĊĊĠĠĠĠĠĠĠ Ġvar Ġtries Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( tri es Ġ< ĠCOL LECTION _ AT TEMP TS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Collection Ġcall Ġattempt Ġ# ${ tri es }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Collection ForUser FromString ( userName , Ġis Owned , Ġis Brief )?. let Ġ{ Ġcollection Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Collection Ġfound Ġfor Ġ$ userName ! Ġ${ "${ ( collection . items ?. size Ġ?: Ġ- 1 )} Ġitems "} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcollection ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( retry Delay Ġ?: ĠDEL AY _ MS ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtries ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprintln (" Could Ġnot Ġobtain Ġcollection Ġfor Ġ$ userName Ġ") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget Collection ForUser FromString ( userName : ĠString , Ġis Owned : ĠBoolean , Ġis Brief : ĠBoolean ): ĠB GG Item Collection Remote ? Ġ= ĊĠĠĠĠĠĠĠ Ġsuspend Coroutine Ġ{ Ġcontinuation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb gg Service . getItem Collection Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserName Ġ= ĠuserName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Owned Numeric Ġ= Ġis Owned . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Brief Numeric Ġ= Ġis Brief . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). enqueue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠCallback < String ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall < String ? >, Ġresponse : ĠResponse < String ?> ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġif Ġ( response . code () Ġ== Ġ 2 0 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġxml Serializer . read ( B GG Item Collection Remote :: class . java , Ġresponse . body ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < String ? >, Ġt : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Board Game Collection With Details ( userName : ĠString , Ġis Owned : ĠBoolean , Ġretry Delay : ĠLong ?): ĠB GG Thing Collection Remote ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcollection Ġ= Ġget Collection ForUser ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserName Ġ= ĠuserName , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Owned Ġ= Ġis Owned , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Brief Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġretry Delay Ġ= Ġretry Delay ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġboard Games Ġ= Ġcollection ?. items ?. map NotNull Ġ{ Ġitem Ġ-> Ġitem . objectId . toInt OrNull () Ġ} ?. let Ġ{ Ġboard Game Ids Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Thing Collection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġids Ġ= Ġboard Game Ids , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstats Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠBO ARD _ GAME _ TH ING _ TYPE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġboard Games ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Play s ForUser ( userName : ĠString ): ĠB GG Play List Remote Ġ= Ġb gg Service . get Play s ForUser ( userName ) ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Thing ( id : ĠInt , Ġstats : ĠBoolean , Ġtype : ĠString ?): ĠB GG Thing Remote ? Ġ= Ġget Thing Collection ( id , Ġstats , Ġtype ). things ?. first OrNull () ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Thing Collection ( id : ĠInt , Ġstats : ĠBoolean , Ġtype : ĠString ?): ĠB GG Thing Collection Remote Ġ= ĊĠĠĠĠĠĠĠ Ġb gg Service . get Thing ( thing Id Ġ= Ġid . toString (), Ġstats Numeric Ġ= Ġstats . toInt (), Ġthing Type Ġ= Ġtype ) ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Thing Collection ( ids : ĠList < Int >, Ġstats : ĠBoolean , Ġtype : ĠString ?): ĠB GG Thing Collection Remote Ġ= ĊĠĠĠĠĠĠĠ Ġb gg Service . get Thing ( thing Id Ġ= Ġids . join ToString ("," ), Ġstats Numeric Ġ= Ġstats . toInt (), Ġthing Type Ġ= Ġtype ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEL AY _ MS Ġ= Ġ 3 0 0 0 L ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOL LECTION _ AT TEMP TS Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠBO ARD _ GAME _ TH ING _ TYPE Ġ= Ġ" board game " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġxml Serializer Ġ= ĠPers ister ( Visitor Strategy ( B GG Thing Poll Visitor ())) ĊĠĠĠ Ġ} Ċ }