package Ġorg . gob lin framework . remote . client . invocation . filter Ċ Ċ import Ġorg . gob lin framework . api . annotation . Singleton Ċ import Ġorg . gob lin framework . remote . client . invocation . Remote Client Invocation Ċ import Ġorg . gob lin framework . remote . client . module . exception . Client No Transport Route Exception Ċ import Ġorg . gob lin framework . rpc . filter . Rpc FilterChain Ċ import Ġorg . gob lin framework . transport . client . channel . Transport Client Ċ Ċ @ Singleton Ċ class ĠSelect Route Filter Ġprivate Ġconstructor () Ġ: ĠAbstract Internal Filter () Ġ{ ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġ@ Jvm Field Ġval ĠINSTANCE Ġ= ĠSelect Route Filter () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdo Filter ( invocation : ĠRemote Client Invocation , Ġchain : ĠRpc FilterChain < Remote Client Invocation >) Ġ{ ĊĠĠĠ Ġval Ġroutes Ġ= Ġmutable ListOf < Transport Client >() ĊĠĠĠ Ġif Ġ( invocation . dispatch All ()) Ġ{ ĊĠĠĠĠĠ Ġroutes . addAll ( invocation . client . select Transport Clients ()) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġinvocation . client . select Transport Client ()?. run Ġ{ ĊĠĠĠĠĠĠĠ Ġroutes . add ( this ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( routes . isEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( invocation . ignore No Provider ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġinvocation . complete ( null ) ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . error ("{ CLIENT _ NO _ TRANSPORT _ ERROR } Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" No Ġavailable Ġtransport Ġroute Ġselected Ġ[ service ={} ]", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvocation . service Id . as Text ()) ĊĠĠĠĠĠĠĠ Ġinvocation . complete ( null , ĠClient No Transport Route Exception ()) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġinvocation . routes Ġ= Ġroutes ĊĠĠĠ Ġchain . filter ( invocation ) ĊĠ Ġ} Ċ }