package Ġcom . ja ffa . rpc . lib . request Ċ Ċ import Ġcom . ja ffa . rpc . lib . callbacks . Callback Ċ import Ġcom . ja ffa . rpc . lib . common . Final ization Helper Ċ import Ġcom . ja ffa . rpc . lib . common . Option Constants Ċ import Ġcom . ja ffa . rpc . lib . common . Protocol Definitions Ċ import Ġcom . ja ffa . rpc . lib . entities . Command Ċ import Ġcom . ja ffa . rpc . lib . entities . Exception Holder Ċ import Ġcom . ja ffa . rpc . lib . exception . J aff a Rpc ExecutionException Ċ import Ġcom . ja ffa . rpc . lib . exception . J aff a Rpc System Exception Ċ import Ġcom . ja ffa . rpc . lib . ui . Admin Server Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ class ĠRequest Impl < T >( private Ġval Ġcommand : ĠCommand ) Ġ: ĠRequest < T > Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠLoggerFactory . getLogger ( Final ization Helper :: class . java ) ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsender : ĠSender ĊĠĠĠ Ġprivate Ġvar Ġtimeout : ĠLong Ġ= Ġ- 1 ĊĠĠĠ Ġprivate Ġvar Ġmodule Id : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġwith Timeout ( timeout : ĠLong ?, Ġunit : ĠTimeUnit ?): ĠRequest Impl < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( unit Ġ!= Ġnull ) Ġ{ ĠOption Constants . IL LEG AL _ ARGS _ MESSAGE Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( timeout Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( timeout Ġ>= Ġ 0 ) Ġ{ ĠOption Constants . NEGATIVE _ TIMEOUT _ MESSAGE Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . timeout Ġ= Ġtimeout . let Ġ{ Ġunit . to Millis ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Module ( module Id : ĠString ?): ĠRequest < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( module Id Ġ!= Ġnull ) Ġ{ ĠOption Constants . IL LEG AL _ ARGS _ MESSAGE Ġ} ĊĠĠĠĠĠĠĠ Ġthis . module Id Ġ= Ġmodule Id ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Sender () Ġ{ ĊĠĠĠĠĠĠĠ Ġsender . command Ġ= Ġcommand ĊĠĠĠĠĠĠĠ Ġsender . module Id Ġ= Ġmodule Id ĊĠĠĠĠĠĠĠ Ġsender . timeout Ġ= Ġtimeout ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexecute Sync (): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Sender () ĊĠĠĠĠĠĠĠ Ġcommand . request Time Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġcommand . local Request Time Ġ= ĠSystem . nano Time () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcommand . let Ġ{ Ġsender . execute Sync ( it ) Ġ} ĊĠĠĠĠĠĠĠ ĠAdmin Server . add Metric ( command ) ĊĠĠĠĠĠĠĠ Ġif Ġ( result Ġis ĠException Holder ) Ġthrow ĠJ aff a Rpc ExecutionException ( result . stack Trace ) ĊĠĠĠĠĠĠĠ Ġif Ġ( result Ġis ĠThrowable ) Ġthrow ĠJ aff a Rpc ExecutionException ( result ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresult Ġas ĠT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexecute Async ( key : ĠString ?, Ġlistener : ĠClass < out ĠCallback < T >> ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire (!( key Ġ== Ġnull Ġ|| Ġlistener Ġ== Ġnull )) Ġ{ ĠOption Constants . IL LEG AL _ ARGS _ MESSAGE Ġ} ĊĠĠĠĠĠĠĠ Ġinit Sender () ĊĠĠĠĠĠĠĠ Ġwith ( command ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . callback Class Ġ= Ġlistener . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . callback Key Ġ= Ġkey ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . request Time Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . local Request Time Ġ= ĠSystem . nano Time () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . async Expire Time Ġ= ĠSystem . currentTimeMillis () Ġ+ Ġif Ġ( timeout Ġ!= Ġ- 1 L ) Ġtimeout Ġelse Ġ 1 0 0 0 Ġ* Ġ 6 0 Ġ* Ġ 6 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlog . debug (" Async Ġcommand Ġwith ĠID Ġ{} Ġwas Ġadded Ġto Ġthe Ġfinal ization Ġqueue ", Ġcommand . rq Uid ) ĊĠĠĠĠĠĠĠ ĠFinal ization Helper . events To Consume [ command . callback Key ] Ġ= Ġcommand ĊĠĠĠĠĠĠĠ Ġsender . execute Async ( command ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProtocol Definitions . current Sender Class . getDeclared Constructor (). newInstance () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠJ aff a Rpc System Exception (" Can Ġnot Ġinitialize Ġthe Ġrequest Ġsender !") ĊĠĠĠĠĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsender Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }