package Ġcom . f riday tech . z rx kit . re layer Ċ Ċ import Ġcom . f riday tech . z rx kit . model . Signed Order Ċ import Ġcom . f riday tech . z rx kit . re layer . model . Asset Pair Ċ import Ġcom . f riday tech . z rx kit . re layer . model . Order Book Ċ import Ġcom . f riday tech . z rx kit . re layer . model . Rel ayer Ċ import Ġcom . f riday tech . z rx kit . re layer . remote . Order Book Response Ċ import Ġcom . f riday tech . z rx kit . re layer . remote . Rel ayer ApiClient Ċ import Ġio . reactivex . Flow able Ċ import Ġjava . util .* Ċ Ċ class ĠRel ayer Manager ( ĊĠĠĠ Ġoverride Ġval Ġavailable Relay ers : ĠList < Rel ayer > Ċ ) Ġ: ĠI Rel ayer Manager Ġ{ ĊĠĠĠ Ġprivate Ġval Ġre layer Clients Ġ= Ġavailable Relay ers . map Ġ{ ĠRel ayer ApiClient ( it . config ) Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T > Ġvalidate Rel ayer Id ( re layer Id : ĠInt , Ġon Valid : Ġ() Ġ-> ĠFlow able < T >): ĠFlow able < T > Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( re layer Id Ġ< Ġre layer Clients . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Valid . invoke () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFlow able . error ( Exception (" Rel ayer Ġindex Ġout Ġof Ġbounds Ġ- Ġrequested : Ġ$ re layer Id , Ġtotal : Ġ${ re layer Clients . size } ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠisValid Retry Rel ayer Id ( re layer Id : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ Ġre layer Id Ġ< Ġre layer Clients . size Ġ- Ġ 1 ĊĊĠĠĠ Ġoverride Ġfun Ġget Asset Pairs ( re layer Id : ĠInt ): ĠFlow able < List < Asset Pair >> Ġ= ĊĠĠĠĠĠĠĠ Ġvalidate Rel ayer Id ( re layer Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre layer Clients [ re layer Id ]. get Assets () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Resume Next Ġ{ Ġthrowable : ĠThrowable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isValid Retry Rel ayer Id ( re layer Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Asset Pairs ( re layer Id Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFlow able . error ( throwable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Order book ( re layer Id : ĠInt , Ġbase : ĠString , Ġquote : ĠString , Ġlimit : ĠInt ): ĠFlow able < Order Book Response > Ġ= ĊĠĠĠĠĠĠĠ Ġvalidate Rel ayer Id ( re layer Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre layer Clients [ re layer Id ]. getOrder book ( base , Ġquote , Ġlimit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Resume Next Ġ{ Ġthrowable : ĠThrowable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isValid Retry Rel ayer Id ( re layer Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Order book ( re layer Id Ġ+ Ġ 1 , Ġbase , Ġquote , Ġlimit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFlow able . error ( throwable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpost Order ( re layer Id : ĠInt , Ġorder : ĠSigned Order ): ĠFlow able < Unit > Ġ= ĊĠĠĠĠĠĠĠ Ġvalidate Rel ayer Id ( re layer Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre layer Clients [ re layer Id ]. post Order ( order ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Resume Next Ġ{ Ġthrowable : ĠThrowable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isValid Retry Rel ayer Id ( re layer Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Order ( re layer Id Ġ+ Ġ 1 , Ġorder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFlow able . error ( throwable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Orders ( ĊĠĠĠĠĠĠĠ Ġre layer Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġm aker Address : ĠString ?, ĊĠĠĠĠĠĠĠ Ġlimit : ĠInt ĊĠĠĠ Ġ): ĠFlow able < Order Book > Ġ= Ġvalidate Rel ayer Id ( re layer Id ) Ġ{ ĊĠĠĠĠĠĠĠ Ġre layer Clients [ re layer Id ]. get Orders ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm aker Address ?. toLowerCase ( Locale . US ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlimit ĊĠĠĠĠĠĠĠ Ġ). onError Resume Next Ġ{ Ġthrowable : ĠThrowable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isValid Retry Rel ayer Id ( re layer Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Orders ( re layer Id Ġ+ Ġ 1 , Ġm aker Address , Ġlimit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFlow able . error ( throwable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ