package Ġcom . kotlin conf . library . domain . repository Ċ Ċ import Ġcom . github . a ak ira . n api er . N api er Ċ import Ġdev . blue f alcon .* Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . isActive Ċ import Ġkotlinx . coroutines . launch Ċ import Ġcom . kotlin conf . library . domain . UI Ċ import Ġcom . kotlin conf . library . domain . entity . Beacon Info ĊĊ Ċ class ĠSpot Search Repository ( ĊĠĠĠ Ġcontext : ĠApplication Context , ĊĠĠĠ Ġprivate Ġval Ġgame Data Repository : ĠGame Data Repository Ċ ) Ġ: ĠBlue F alcon Delegate Ġ{ ĊĠĠĠ Ġprivate Ġval Ġbf : ĠBlue F alcon Ġ= ĠBlue F alcon ( context , Ġnull ) ĊĊĠĠĠ Ġprivate Ġval Ġlast Beacon R ssi Ġ= Ġmutable Map Of < String , ĠInt >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . bf . deleg ates . add ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Sc anning () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . bf . is Sc anning ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠN api er . d ( message Ġ= Ġ" starting Ġsearch ...") ĊĊĠĠĠĠĠĠĠ Ġthis . do Sc anning () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop Sc anning () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . bf . stop Sc anning () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Sc anning (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . bf . is Sc anning ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrestart Sc anning () Ġ{ ĊĠĠĠĠĠĠĠ ĠN api er . d ("> >> ĠSC AN NING ĠRE STARTED ") ĊĠĠĠĠĠĠĠ Ġthis . do Sc anning () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo Sc anning () Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . UI ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( isActive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( try Start Scan ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 5 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtry Start Scan (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . bf . scan () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBluetooth Unsupported Exception , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBluetooth Not Enabled Exception , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBluetooth Reset ting Exception , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBluetooth Unknown Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN api er . e ( message Ġ= Ġ" known ĠBT Ġexception , Ġtry Ġagain Ġlater ", Ġthrowable Ġ= Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN api er . e ( message Ġ= Ġ" fail Ġscan ", Ġthrowable Ġ= Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend Beacon Info ( bluetooth Per ipheral : ĠBluetooth Per ipheral ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname : ĠString Ġ= Ġbluetooth Per ipheral . name Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġr ssi : ĠInt Ġ= Ġbluetooth Per ipheral . rssi ?. toInt () Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġprocessed R ssi Ġ= Ġif Ġ( rssi Ġ== Ġ 1 2 7 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Beacon R ssi [ name ] Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Beacon R ssi [ name ] Ġ= Ġr ssi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr ssi ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbe acon Info Ġ= ĠBe acon Info ( name Ġ= Ġname , Ġr ssi Ġ= Ġprocessed R ssi ) ĊĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . UI ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠN api er . d (" beacon Info : Ġ$ beacon Info ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame Data Repository . be ac ons Channel . send ( beacon Info ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdid Discover Device ( bluetooth Per ipheral : ĠBluetooth Per ipheral ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . send Beacon Info ( bluetooth Per ipheral ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdid Connect ( bluetooth Per ipheral : ĠBluetooth Per ipheral ) Ġ{} ĊĠĠĠ Ġoverride Ġfun Ġdid Disconnect ( bluetooth Per ipheral : ĠBluetooth Per ipheral ) Ġ{} ĊĠĠĠ Ġoverride Ġfun Ġdid Discover Services ( bluetooth Per ipheral : ĠBluetooth Per ipheral ) Ġ{} ĊĠĠĠ Ġoverride Ġfun Ġdid Discover Character istics ( bluetooth Per ipheral : ĠBluetooth Per ipheral ) Ġ{} ĊĠĠĠ Ġoverride Ġfun Ġdid Character ist c ValueChanged ( ĊĠĠĠĠĠĠĠ Ġbluetooth Per ipheral : ĠBluetooth Per ipheral , ĊĠĠĠĠĠĠĠ Ġbluetooth Characteristic : ĠBluetooth Characteristic ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdid Update MT U ( bluetooth Per ipheral : ĠBluetooth Per ipheral ) Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġdid R ssi Update ( bluetooth Per ipheral : ĠBluetooth Per ipheral ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . send Beacon Info ( bluetooth Per ipheral ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġscan Did Failed ( error : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ ĠN api er . e (" scan Ġfailed : Ġ$ error ") ĊĠĠĠĠĠĠĠ Ġdo Sc anning () ĊĠĠĠ Ġ} Ċ }