package Ġcom . tract ive . android . or xo 2 Ċ Ċ import Ġandroid . util . Log Ċ import Ġcom . jak ew h art on . rx relay 2 . Behavior Relay Ċ import Ġcom . jak ew h art on . rx relay 2 . Publish Relay Ċ import Ġcom . jak ew h art on . rx relay 2 . Relay Ċ import Ġcom . jak ew h art on . rx relay 2 . Replay Relay Ċ import Ġio . reactivex . Back pressure Strategy Ċ import Ġio . reactivex . Scheduler Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ Ċ abstract Ġclass ĠOr xo Bus ( private Ġval Ġis Serialized : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġrelay : ĠRelay < Any > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Serialized ) Ġprovide Relay (). to Serialized () Ġelse Ġprovide Relay () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġdis pos ables : ĠMutable Map < Any , ĠComposite Disposable > Ġ= Ġmutable Map Of () ĊĊĠĠĠ Ġprotected Ġabstract Ġfun Ġprovide Relay (): ĠRelay < Any > ĊĊĠĠĠ Ġfun Ġunregister ( event Receiver : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdis pos ables [ event Receiver ]?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdis pos ables . remove ( event Receiver ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġ< T > Ġget Event ( subscriber : ĠAny , Ġevent : ĠClass < T >, Ġscheduler : ĠScheduler Ġ= ĠAndroid Schedulers . main Thread (), Ġaction : Ġ( T ) Ġ-> ĠUnit ) Ġ= Ġrelay ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Flow able ( Back pressure Strategy . BUFFER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. of Type ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( action , Ġ{ ĠLog . i (" Or xo ", Ġ" Exception Ġin ĠOr xo Bus : Ġ" Ġ+ Ġit . message ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. register ( subscriber ) ĊĊĠĠĠ Ġfun Ġpost ( event : ĠAny ) Ġ= Ġrelay . accept ( event ) ĊĊĠĠĠ Ġprivate Ġfun ĠDis posable . register ( event Receiver : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdis pos ables [ event Receiver ] Ġ= Ġ( dis pos ables [ event Receiver ] Ġ?: ĠComposite Disposable ()). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( this @ register ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠBe haviour ( is Serialized : ĠBoolean Ġ= Ġfalse ) Ġ: ĠOr xo Bus ( is Serialized ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġprovide Relay (): ĠRelay < Any > Ġ= ĠBehavior Relay . create () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠPublish ( is Serialized : ĠBoolean Ġ= Ġfalse ) Ġ: ĠOr xo Bus ( is Serialized ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġprovide Relay (): ĠRelay < Any > Ġ= ĠPublish Relay . create () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠRe play ( is Serialized : ĠBoolean Ġ= Ġfalse ) Ġ: ĠOr xo Bus ( is Serialized ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġprovide Relay (): ĠRelay < Any > Ġ= ĠRe play Relay . create () ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠOr xo ( private Ġval Ġsubscriber : ĠAny , Ġval Ġbus : ĠOr xo Bus , Ġprivate Ġval Ġscheduler : ĠScheduler ) Ġ{ ĊĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġ< T > Ġsubscribe ( event : ĠClass < T >, Ġschedule : ĠScheduler Ġ= Ġscheduler , Ġaction : Ġ( T ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbus . getEvent ( subscriber , Ġevent , Ġschedule , Ġaction ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġunregister () Ġ= Ġbus . unregister ( subscriber ) Ċ }