package Ġinfo . k interest . jvm . data stores Ċ Ċ import Ġinfo . k interest . KI Entity Ċ import Ġinfo . k interest . data stores .* Ċ import Ġinfo . k interest . functional . Try Ċ import Ġinfo . k interest . functional . getOrElse Ċ import Ġinfo . k interest . query . Query Ċ import Ġinfo . k interest . query . QueryResult Ċ import Ġkotlinx . coroutines . experimental . Coroutine Dispatcher Ċ import Ġkotlinx . coroutines . experimental . Deferred Ċ import Ġkotlinx . coroutines . experimental . channels . Receive Channel Ċ import Ġkotlinx . coroutines . experimental . channels . Send Channel Ċ import Ġkotlinx . coroutines . experimental . launch Ċ import Ġorg . kode in . di . K ode in Ċ import Ġorg . kode in . di . K ode in Aware Ċ import Ġorg . kode in . di . er ased . instance Ċ Ċ abstract Ġclass ĠRemote Outgoing DataStore Facade ( name : ĠString , Ġoverride Ġfinal Ġval Ġk ode in : ĠK ode in ) Ġ: ĠData Store Facade ( name ), ĠK ode in Aware Ġ{ ĊĠĠĠ Ġabstract Ġval Ġds : ĠData Store Facade ĊĠĠĠ Ġabstract Ġval Ġch In : ĠReceive Channel < Query Msg > ĊĠĠĠ Ġabstract Ġval Ġch Out : ĠSend Channel < QueryResult Msg > ĊĠĠĠ Ġval Ġpool : ĠCor outine Dispatcher Ġby Ġinstance (" data stores ") ĊĊĠĠĠ Ġprivate Ġvar Ġ_ id : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġval Ġnext Id : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ id ++ ĊĊĠĠĠ Ġoverride Ġfun Ġ< E Ġ: ĠK IEntity < K >, ĠK Ġ: ĠAny > Ġquery ( query : ĠQuery < E , ĠK >): ĠTry < Deferred < Try < QueryResult < E , ĠK >>>> Ġ= Ġds . query ( query ) ĊĠĠĠ Ġoverride Ġfun Ġ< E Ġ: ĠK IEntity < K >, ĠK Ġ: ĠAny > Ġquery Sync ( query : ĠQuery < E , ĠK >): ĠTry < QueryResult < E , ĠK >> Ġ= Ġds . query Sync ( query ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Receiver () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinit Receiver () Ġ{ ĊĠĠĠĠĠĠĠ Ġlaunch ( pool ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( msg Ġin Ġch In ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt q Ġ= Ġquery ( msg . q Ġas ĠQuery < KI Entity < Any >, ĠAny >) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tq . is Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġnext Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg . id . complete ( true Ġto Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeferred Ġ= Ġt q . getOrElse Ġ{ Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch ( coroutine Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġdeferred ?. await () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġch Out . send ( res . map Ġ{ ĠQuery Try Success ( id , Ġit ) Ġ}. getOrElse Ġ{ ĠQuery Try Failure ( id ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg . id . complete ( false Ġto Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ }