package Ġio . piv otal . pal . data . framework . event Ċ Ċ import Ġjava . util . concurrent . BlockingQueue Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ import Ġjava . util . concurrent . Copy On Write Array Set Ċ Ċ abstract Ġclass ĠAsync Event Channel ( private Ġval ĠeventName : ĠString ) Ġ{ ĊĊĠĠĠ Ġprotected Ġfun Ġget Queues (): ĠSet < BlockingQueue <* >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġqueues . compute If Absent ( eventName ) Ġ{ Ġ_ Ġ-> ĠCopy On Write Array Set () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġadd Queue ( queue : ĠBlock ing Queue <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġset Ġ= Ġqueues . compute If Absent ( eventName ) Ġ{ Ġ_ Ġ-> ĠCopy On Write Array Set () Ġ} ĊĠĠĠĠĠĠĠ Ġset . add ( queue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġqueues Ġ= ĠConcurrent HashMap < String , ĠMutable Set < BlockingQueue <* >> >() ĊĠĠĠ Ġ} Ċ } Ċ