package Ġnu . drop ud . bund r . data . firebase Ċ Ċ import Ġnu . drop ud . bund r . app . App Ċ import Ġnu . drop ud . bund r . common . extension . Child Event Ċ import Ġnu . drop ud . bund r . common . extension . Child Event Added Ċ import Ġnu . drop ud . bund r . common . extension . Child Event Removed Ċ import Ġnu . drop ud . bund r . common . extension . rx Child Events Ċ import Ġnu . drop ud . bund r . data . model . Ice Candidate Firebase Ċ import Ġcom . google . firebase . database .* Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . Flow able Ċ import Ġorg . webrtc . Ice Candidate Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton Ċ Ċ @ Singleton Ċ class ĠFirebase Ice Candidates Ġ@ Inject Ġconstructor ( private Ġval Ġfirebase Database : ĠFirebase Database ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠI CE _ C AND ID ATES _ PATH Ġ= Ġ" ice _ candidates /" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdevice Ice Candidates Path ( uuid : ĠString ) Ġ= ĠI CE _ C AND ID ATES _ PATH . plus ( uuid ) ĊĊĠĠĠ Ġfun Ġsend ( ice Candidate : ĠI ce Candidate ): ĠComp letable Ġ= ĠComp letable . create Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreference Ġ= Ġfirebase Database . getReference ( device Ice Candidates Path ( App . CURRENT _ DEVICE _ UUID )) ĊĠĠĠĠĠĠĠ Ġwith ( reference ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Disconnect (). remove Value () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpush (). setValue ( Ice Candidate Firebase . createFrom Ice Candidate ( ice Candidate )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġit . onComplete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove ( ice Candidates ToRemove : ĠArray < Ice Candidate >): ĠComp letable Ġ= ĠComp letable . create Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġice Candidates ToRemove List Ġ= Ġice Candidates ToRemove ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠI ce Candidate Firebase . createFrom Ice Candidate ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Mutable List () ĊĠĠĠĠĠĠĠ Ġval Ġreference Ġ= Ġfirebase Database . getReference ( device Ice Candidates Path ( App . CURRENT _ DEVICE _ UUID )) ĊĊĠĠĠĠĠĠĠ Ġreference . run Transaction ( object Ġ: ĠTransaction . Handler Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdo Transaction ( mutable Data : ĠMutable Data ): ĠTransaction . Result Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Indicator Ġ= Ġobject Ġ: ĠGeneric Type Indicator < Mutable Map < String , ĠI ce Candidate Firebase >>() Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Ice Candidates In Firebase Map Ġ= Ġmutable Data . getValue ( type Indicator ) Ġ?: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTransaction . success ( mutable Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( key , Ġvalue ) Ġin Ġcurrent Ice Candidates In Firebase Map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ice Candidates ToRemove List . remove ( value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ice Candidates In Firebase Map . remove ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable Data . value Ġ= Ġcurrent Ice Candidates In Firebase Map ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTransaction . success ( mutable Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonComplete ( database Error : ĠDatabase Error , Ġcommitted : ĠBoolean , Ġp 2 : ĠData Snapshot ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( committed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . onComplete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . onError ( database Error . to Exception ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget ( remote Uuid : ĠString ): ĠFlow able < Child Event < Ice Candidate >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfirebase Database . getReference ( device Ice Candidates Path ( remote Uuid )). rx Child Events () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġis ĠChild Event Added Ġ|| Ġit Ġis ĠChild Event Removed Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġice Candidate Firebase : ĠI ce Candidate Firebase Ġ= Ġit . data . getValue ( Ice Candidate Firebase :: class . java ) Ġas ĠI ce Candidate Firebase ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġice Candidate Ġ= Ġice Candidate Firebase . to Ice Candidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠChild Event Added ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChild Event Added ( ice Candidate , Ġit . previous Child Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChild Event Removed ( ice Candidate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ