package Ġjp . co . sor am its u . fe ar less _ utils . ws rpc Ċ Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . ne ov ision aries . ws . client . WebSocket Factory Ċ import Ġcom . ne ov ision aries . ws . client . WebSocket State Ċ import Ġjp . co . sor am its u . fe ar less _ utils . ws rpc . exception . Connection Closed Exception Ċ import Ġjp . co . sor am its u . fe ar less _ utils . ws rpc . logging . Logger Ċ import Ġjp . co . sor am its u . fe ar less _ utils . ws rpc . map pers . non Null Ċ import Ġjp . co . sor am its u . fe ar less _ utils . ws rpc . map pers . string Id Mapper Ċ import Ġjp . co . sor am its u . fe ar less _ utils . ws rpc . recovery . Re connector Ċ import Ġjp . co . sor am its u . fe ar less _ utils . ws rpc . request . Delivery Type Ċ import Ġjp . co . sor am its u . fe ar less _ utils . ws rpc . request . Request Executor Ċ import Ġjp . co . sor am its u . fe ar less _ utils . ws rpc . request . Respond able Send able Ċ import Ġjp . co . sor am its u . fe ar less _ utils . ws rpc . request . runtime . Runtime Request Ċ import Ġjp . co . sor am its u . fe ar less _ utils . ws rpc . response . Rpc Response Ċ import Ġjp . co . sor am its u . fe ar less _ utils . ws rpc . socket . Observable State Ċ import Ġjp . co . sor am its u . fe ar less _ utils . ws rpc . socket . Rpc Socket Ċ import Ġjp . co . sor am its u . fe ar less _ utils . ws rpc . socket . Rpc Socket Listener Ċ import Ġjp . co . sor am its u . fe ar less _ utils . ws rpc . socket . State Observer Ċ import Ġjp . co . sor am its u . fe ar less _ utils . ws rpc . state . Socket StateMachine Ċ import Ġjp . co . sor am its u . fe ar less _ utils . ws rpc . state . Socket StateMachine . Event Ċ import Ġjp . co . sor am its u . fe ar less _ utils . ws rpc . state . Socket StateMachine . Side Effect Ċ import Ġjp . co . sor am its u . fe ar less _ utils . ws rpc . state . Socket StateMachine . State Ċ import Ġjp . co . sor am its u . fe ar less _ utils . ws rpc . subscription . Respond able Subscription Ċ import Ġjp . co . sor am its u . fe ar less _ utils . ws rpc . subscription . response . Subscription Change Ċ Ċ class ĠSocket Service ( ĊĠĠĠ Ġval Ġjson Mapper : ĠGson , ĊĠĠĠ Ġprivate Ġval Ġlogger : ĠLogger , ĊĠĠĠ Ġprivate Ġval Ġweb Socket Factory : ĠWebSocket Factory , ĊĠĠĠ Ġprivate Ġval Ġre connector : ĠRe connector , ĊĠĠĠ Ġprivate Ġval Ġrequest Executor : ĠRequest Executor Ċ ) Ġ: ĠRpc Socket Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġsocket : ĠRpc Socket ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġstate Container Ġ= ĠObservable State ( initialState Ġ= ĠState . Disconnected ) ĊĊĠĠĠ Ġfun Ġstarted () Ġ= Ġstate Container . getState () Ġ! is ĠState . Disconnected ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInit iate Ġnew Ġconnection Ġto Ġthe Ġgiven Ġurl . ĊĠĠĠĠ Ġ* ĠOnly Ġhas Ġeffect Ġwhen Ġcalled Ġfrom Ġ[ Socket StateMachine . State . Disconnected ] Ġstate . ĊĠĠĠĠ Ġ* ĠMean ing , Ġthis Ġis Ġthe Ġfirst Ġmethod Ġthat Ġshould Ġbe Ġcalled Ġafter Ġcreate Ġ[ Socket Service ] Ġinstance ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġurl Ġ- Ġurl Ġto Ġconnect Ġto ĊĠĠĠĠ Ġ* Ġ@ param Ġremain Paused Ġ- Ġtrue Ġif Ġsocket Ġshould Ġstart Ġin Ġ[ Socket StateMachine . State . Paused ] Ġstate , ĊĠĠĠĠ Ġ* Ġdelay ing Ġconnection Ġuntil Ġ[ resume ] Ġis Ġcalled ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstart ( url : ĠString , Ġremain Paused : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate State ( Event . Start ( url , Ġremain Paused )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCloses Ġconnection Ġand Ġfor gets Ġabout Ġall Ġrequests Ġand Ġsubscriptions . ĊĠĠĠĠ Ġ* ĠShould Ġbe Ġused Ġwhen Ġsocket Ġconnection Ġis Ġno Ġlonger Ġneeded . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate State ( Event . Stop ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSe am lessly Ġswitches Ġconnection Ġurl Ġsaving Ġall Ġpending Ġ& Ġactive Ġrequests Ġor Ġsubscriptions ĊĠĠĠĠ Ġ* ĠShould Ġbe Ġused Ġinstead Ġof ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġstop () ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġstart ( new UR l ) ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġswitch Url ( url : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate State ( Event . Switch Url ( url )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCloses Ġconnection Ġbut Ġsaves Ġall Ġsubscriptions Ġand Ġ[ Delivery Type . AT _ LE AST _ ON CE ] Ġrequests . ĊĠĠĠĠ Ġ* ĠReports Ġ[ Connection Closed Exception ] Ġto Ġ[ Delivery Type . AT _ MO ST _ ON CE ] Ġrequests . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpause () Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate State ( Event . Pause ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRes umes Ġconnection Ġfrom Ġ[ Socket StateMachine . State . Paused ] Ġstate , ĊĠĠĠĠ Ġ* Ġrecover ing Ġall Ġsubscriptions Ġand Ġ[ Delivery Type . AT _ LE AST _ ON CE ] Ġrequests ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġresume () Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate State ( Event . Resume ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd State Observer ( observer : ĠState Observer ) Ġ= Ġstate Container . add Observer ( observer ) ĊĊĠĠĠ Ġfun Ġremove State Observer ( observer : ĠState Observer ) Ġ= Ġstate Container . remove Observer ( observer ) ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġsubscribe ( ĊĠĠĠĠĠĠĠ Ġrequest : ĠRuntime Request , ĊĠĠĠĠĠĠĠ Ġcallback : ĠResponse Listener < Subscription Change >, ĊĠĠĠĠĠĠĠ Ġunsubscribe Method : ĠString ĊĠĠĠ Ġ): ĠC ancellable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġexecute Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDelivery Type . ON _ RE CONNECT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSub scribed Callback ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit iator Id Ġ= Ġrequest . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunsubscribe Method Ġ= Ġunsubscribe Method , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscription Callback Ġ= Ġcallback , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgson Ġ= Ġjson Mapper , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Sub scribed Ġ= Ġ:: update State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġexecute Request ( ĊĠĠĠĠĠĠĠ Ġruntime Request : ĠRuntime Request , ĊĠĠĠĠĠĠĠ Ġdelivery Type : ĠDelivery Type Ġ= ĠDelivery Type . AT _ LE AST _ ON CE , ĊĠĠĠĠĠĠĠ Ġcallback : ĠResponse Listener < Rpc Response > ĊĠĠĠ Ġ): ĠC ancellable Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsend able Ġ= ĠRespond able Send able ( runtime Request , Ġdelivery Type , Ġcallback ) ĊĊĠĠĠĠĠĠĠ Ġupdate State ( Event . Send ( send able )) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠRequest C ancellable ( send able ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġoverride Ġfun Ġon Response ( rpc Response : ĠRpc Response ) Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate State ( Event . Send able Response ( rpc Response )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Response ( subscription Change : ĠSubscription Change ) Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate State ( Event . Subscription Response ( subscription Change )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġoverride Ġfun Ġon Connected () Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate State ( Event . Connected ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġoverride Ġfun Ġon StateChanged ( newState : ĠWebSocket State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( newState Ġ== ĠWebSocket State . CLOSED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate State ( Event . Connection Error ( Connection Closed Exception ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġprivate Ġfun Ġupdate State ( event : ĠEvent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġstate Container . getState () ĊĠĠĠĠĠĠĠ Ġval Ġ( newState , Ġside Effects ) Ġ= ĠSocket StateMachine . transition ( state , Ġevent ) ĊĠĠĠĠĠĠĠ Ġstate Container . setState ( newState ) ĊĊĠĠĠĠĠĠĠ Ġlogger . log ("[ STATE ĠM ACH INE ][ TRANS ITION ] Ġ$ event Ġ: Ġ$ state Ġ-> Ġ$ newState ") ĊĊĠĠĠĠĠĠĠ Ġside Effects . forEach (:: consume Side Effect ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconsume Side Effect ( side Effect : ĠSide Effect ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . log ("[ STATE ĠM ACH INE ][ SIDE ĠE FF ECT ] Ġ$ side Effect ") ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( side Effect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSide Effect . Response ToSend able Ġ-> Ġrespond To Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġside Effect . send able , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġside Effect . response ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSide Effect . Respond Send ables Error Ġ-> Ġrespond Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġside Effect . send ables , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġside Effect . error ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSide Effect . Respond To Subscription Ġ-> Ġrespond To Subscription ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġside Effect . subscription , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġside Effect . change ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSide Effect . Send Send ables Ġ-> Ġsend To Socket ( side Effect . send ables ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSide Effect . Connect Ġ-> Ġconnect To Socket ( side Effect . url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSide Effect . Schedule Re connect Ġ-> Ġschedule Re connect ( side Effect . attempt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSide Effect . Disconnect Ġ-> Ġdisconnect () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSide Effect . Un subscribe Ġ-> Ġunsubscribe ( side Effect . subscription ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrespond To Request ( ĊĠĠĠĠĠĠĠ Ġsend able : ĠSocket StateMachine . Send able , ĊĠĠĠĠĠĠĠ Ġresponse : ĠRpc Response ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( send able Ġis ĠRespond able Send able ) ĊĊĠĠĠĠĠĠĠ Ġsend able . callback . onNext ( response ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrespond Error ( send ables : ĠSet < Socket StateMachine . Send able >, Ġthrowable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsend ables . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( it Ġis ĠRespond able Send able ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . callback . onError ( throwable ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrespond To Subscription ( ĊĠĠĠĠĠĠĠ Ġsubscription : ĠSocket StateMachine . Subscription , ĊĠĠĠĠĠĠĠ Ġresponse : ĠSubscription Change ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( subscription Ġis ĠRespond able Subscription ) ĊĊĠĠĠĠĠĠĠ Ġsubscription . callback . onNext ( response ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend To Socket ( send ables : ĠSet < Socket StateMachine . Send able >) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequest Executor . execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend ables . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( it Ġis ĠRespond able Send able ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsocket !!. send Rpc Request ( it . request ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġschedule Re connect ( attempt : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ Ġre connector . schedule Connect ( attempt , Ġ:: ready For Re connect ) ĊĊĠĠĠ Ġprivate Ġfun Ġready For Re connect () Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate State ( Event . Ready To Re connect ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconnect To Socket ( url : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġre connector . reset () ĊĊĠĠĠĠĠĠĠ Ġsocket Ġ= Ġcreate Socket ( url ) ĊĠĠĠĠĠĠĠ Ġsocket !!. connect Async () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Socket ( url : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ ĠRpc Socket ( url , Ġthis , Ġlogger , Ġweb Socket Factory , Ġjson Mapper ) ĊĊĠĠĠ Ġprivate Ġfun Ġdisconnect () Ġ{ ĊĠĠĠĠĠĠĠ Ġsocket !!. clear Listeners () ĊĠĠĠĠĠĠĠ Ġsocket !!. disconnect () ĊĠĠĠĠĠĠĠ Ġsocket Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġrequest Executor . reset () ĊĠĠĠĠĠĠĠ Ġre connector . reset () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġunsubscribe ( subscription : ĠSocket StateMachine . Subscription ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( subscription Ġis ĠRespond able Subscription ) ĊĊĠĠĠĠĠĠĠ Ġval Ġunsubscribe Request Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRuntime Request ( subscription . unsubscribe Method , ĠlistOf ( subscription . id )) ĊĊĠĠĠĠĠĠĠ Ġexecute Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunsubscribe Request , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelivery Type Ġ= ĠDelivery Type . AT _ MO ST _ ON CE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFire And For get Callback () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠResponse Listener < R > Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Next ( response : ĠR ) ĊĊĠĠĠĠĠĠĠ Ġfun ĠonError ( throwable : ĠThrowable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠC ancellable Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSub scribed Callback ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġinit iator Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġunsubscribe Method : ĠString , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġsubscription Callback : ĠResponse Listener < Subscription Change >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġgson : ĠGson , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġon Sub scribed : Ġ( Event . Sub scribed ) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ: ĠResponse Listener < Rpc Response > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Next ( response : ĠRpc Response ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring Id Mapper (). non Null (). map ( response , Ġgson ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscription Callback . onError ( e ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubscription Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRespond able Subscription ( id , Ġinit iator Id , Ġunsubscribe Method , Ġsubscription Callback ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Sub scribed ( Event . Sub scribed ( subscription )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscription Callback . onError ( throwable ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠRequest C ancellable ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġsend able : ĠSocket StateMachine . Send able ĊĠĠĠ Ġ) Ġ: ĠC ancellable Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcancel () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate State ( Event . Cancel ( send able )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠFire And For get Callback Ġ: ĠResponse Listener < Rpc Response > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Next ( response : ĠRpc Response ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ