/* Ċ Ġ* ĠĠĠĠĠ ĠRx Event Sys Ġ- ĠJava ĠReactive X ĠEvent Sys Ġimplementation Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠ ĠThe ĠMIT ĠLicense Ġ( MIT ) Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠCopyright Ġ( c ) Ġ 2 0 1 8 ĠProject Sand stone Ġ< https :// github . com / Project Sand stone / Rx Event Sys > Ċ Ġ* ĠĠĠĠĠ ĠCopyright Ġ( c ) Ġcontributors Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* ĠĠĠĠĠ Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* ĠĠĠĠĠ Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* ĠĠĠĠĠ Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* ĠĠĠĠĠ Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* ĠĠĠĠĠ Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* ĠĠĠĠĠ Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠĠĠĠĠ ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠĠĠĠĠ ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠĠĠĠĠ ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠĠĠĠĠ ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠĠĠĠĠ ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN Ċ Ġ* ĠĠĠĠĠ ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ package Ġcom . github . k ores framework . event sys . rx . impl Ċ Ċ import Ġcom . github . k ores framework . event sys . error . Exception Listen Error Ċ import Ġcom . github . k ores framework . event sys . event . Event Ċ import Ġcom . github . k ores framework . event sys . event . EventListener Ċ import Ġcom . github . k ores framework . event sys . event . EventListener Registry Ċ import Ġcom . github . k ores framework . event sys . result . Listen Result Ċ import Ġcom . github . k ores framework . event sys . rx . Events Ċ import Ġio . reactivex . rx java 3 . core . Observable Ċ import Ġio . reactivex . rx java 3 . subjects . Subject Ċ import Ġjava . lang . reflect . Type Ċ Ċ class ĠEvents Impl ( val Ġlistener Registry : ĠEvent Listener Registry ) Ġ: ĠEvents Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġobservable s Ġ= Ġmutable Map Of < Type , ĠObservable <* >>() ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠEvent > Ġobservable ( eventType : ĠType ): ĠObservable < T > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . observable s . compute If Absent ( eventType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Subject Impl < T >(). also Ġ{ Ġregister Listener ( eventType , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġas ĠObservable < T > ĊĊĠĠĠ Ġprivate Ġfun Ġ< T : ĠEvent > Ġregister Listener ( eventType : ĠType , Ġsubject : ĠSubject < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . listener Registry . register Listener ( this , ĠeventType , ĠE vt Listener ( subject )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠE vt Listener < T : ĠEvent >( val Ġsubject : ĠSubject < T >) Ġ: ĠEvent Listener < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Event ( event : ĠT , Ġdispatcher : ĠAny ): ĠListen Result Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠListen Result . Value ( this . subject . onNext ( event )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠListen Result . Failed ( Exception Listen Error ( t )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }