package Ġio . particle . mesh . setup . flow . setup steps Ċ Ċ import Ġio . particle . android . sdk . cloud . Particle Cloud Ċ import Ġio . particle . mesh . setup . flow . Device Connect To Cloud TimeoutException Ċ import Ġio . particle . mesh . setup . flow . Device Getting Cl a imed TimeoutException Ċ import Ġio . particle . mesh . setup . flow . Mesh Setup Step Ċ import Ġio . particle . mesh . setup . flow . Scopes Ċ import Ġio . particle . mesh . setup . flow . context . Setup Contexts Ċ import Ġkotlinx . coroutines . delay Ċ import Ġmu . Kotlin Logging ĊĊ Ċ class ĠStep Check Device Got Cl a imed ( private Ġval Ġcloud : ĠParticle Cloud ) Ġ: ĠMesh Setup Step () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠKotlin Logging . logger Ġ{} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġdo Run Step ( ctx s : ĠSetup Contexts , Ġscopes : ĠS copes ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( ctx s . target Device . is Cl a imed LD . value Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsuspend Ġfun Ġpoll Devices For New Device ( deviceId : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Lower Ġ= ĠdeviceId . toLowerCase () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmillis Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlimit Millis Ġ= Ġ 4 5 Ġ* Ġ 1 0 0 0 Ġ// Ġ 4 5 Ġseconds ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( millis Ġ< Ġlimit Millis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFIXME : Ġwhat Ġshould Ġthe Ġtiming Ġbe Ġhere ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelay Ġ= Ġ 2 0 0 0 L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( delay ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmillis Ġ+= Ġdelay ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ow ns Device Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcloud . user Ow ns Device ( id Lower ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user Ow ns Device ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info Ġ{ Ġ" Found Ġassigned Ġto Ġuser Ġdevice Ġwith ĠID Ġ$ deviceId " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info Ġ{ Ġ" No Ġdevice Ġwith ĠID Ġ$ deviceId Ġfound Ġyet Ġassigned Ġto Ġuser " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . warn Ġ{ Ġ" Timed Ġout Ġwaiting Ġfor Ġuser Ġto Ġown Ġa Ġdevice Ġwith ĠID Ġ$ deviceId " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠisIn List Ġ= Ġpoll Devices For New Device ( ctx s . target Device . deviceId !! ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! isIn List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠDevice Connect To Cloud TimeoutException () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdevice Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcloud . getDevice ( ctx s . target Device . deviceId !! ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠDevice Getting Cl a imed TimeoutException () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġctx s . target Device . current Device Name Ġ= Ġdevice . name ĊĊĠĠĠĠĠĠĠ Ġctx s . target Device . update Is Cl a imed ( true ) ĊĠĠĠ Ġ} Ċ Ċ }