/* Ċ Ġ* Ġ ĠBlock V ĠAG . ĠCopyright Ġ( c ) Ġ 2 0 1 8 , Ġall Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* Ġ ĠLicensed Ġunder Ġthe ĠBlock V ĠSDK ĠLicense Ġ( the Ġ" License "); Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġor Ġthe ĠBlock V ĠSDK Ġexcept Ġin Ċ Ġ* Ġ Ġcompliance Ġwith Ġthe ĠLicense Ġaccompanying Ġit . ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġthe ĠBlock V Ċ Ġ* Ġ ĠSDK Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF Ċ Ġ* Ġ ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ġlimitations Ċ Ġ* Ġ Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ*/ Ċ package Ġio . block v . common . internal . net . websocket Ċ Ċ import Ġandroid . net . Uri Ċ import Ġandroid . util . Log Ċ import Ġcom . ne ov ision aries . ws . client . WebSocket Ċ import Ġcom . ne ov ision aries . ws . client . WebSocket Adapter Ċ import Ġcom . ne ov ision aries . ws . client . WebSocket Factory Ċ import Ġcom . ne ov ision aries . ws . client . WebSocket Frame Ċ import Ġio . block v . common . internal . json . Json Module Ċ import Ġio . block v . common . internal . net . rest . auth . Authenticator Ċ import Ġio . block v . common . internal . repository . Preferences Ċ import Ġio . block v . common . model . Generic Socket Event Ċ import Ġio . block v . common . model . WebSocket Event Ċ import Ġorg . json . JSONObject Ċ Ċ class ĠWeb socket Impl ( ĊĠ Ġval Ġpreferences : ĠPreferences , ĊĠ Ġval Ġjson Module : ĠJson Module , ĊĠ Ġval Ġauth enticator : ĠAuth enticator Ċ ) Ġ: ĠWebSocket Adapter (), ĠWeb socket Ġ{ ĊĊĠ Ġprivate Ġvar Ġlistener : ĠWebSocket Adapter ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġweb Socket : Ġcom . ne ov ision aries . ws . client . WebSocket ? Ġ= Ġnull ĊĊĠ Ġ@ Synchron ized ĊĠ Ġoverride Ġfun Ġconnect ( listener : ĠWeb socket . WebSocket Listener ) Ġ{ ĊĠĠĠ Ġthis . disconnect () ĊĠĠĠ Ġthis . listener Ġ= Ġobject Ġ: ĠWebSocket Adapter () Ġ{ ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġon Text Message ( websocket : ĠWebSocket ?, Ġmessage : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( message Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent : ĠGeneric Socket Event ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson Module . deserialize ( JSONObject ( message )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Event ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" WebSocket ", Ġexception . message ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġon Disconnected ( ĊĠĠĠĠĠĠĠ Ġwebsocket : ĠWebSocket , ĊĠĠĠĠĠĠĠ Ġserver Close Frame : ĠWebSocket Frame , ĊĠĠĠĠĠĠĠ Ġclient Close Frame : ĠWebSocket Frame , ĊĠĠĠĠĠĠĠ Ġclosed By Server : ĠBoolean ĊĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlistener . onError ( Block v Ws Exception ( Block v Ws Exception . Error . CONNECTION _ DIS CONNECTED , Ġnull )) ĊĠĠĠĠĠĠĠ Ġwebsocket . remove Listener ( this ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġthis . web Socket Ġ= ĠWebSocket Factory () ĊĠĠĠĠĠĠĠ Ġ. create Socket ( getAddress ()) ĊĠĠĠĠĠĠĠ Ġ. addListener ( this . listener ) ĊĠĠĠĠĠĠĠ Ġ. connect () ĊĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠ Ġlistener . onError ( ĊĠĠĠĠĠĠĠ ĠBlock v Ws Exception ( ĊĠĠĠĠĠĠĠĠĠ ĠBlock v Ws Exception . Error . CONNECTION _ FAILED , ĊĠĠĠĠĠĠĠĠĠ Ġexception ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠ Ġ} ĊĊĠ Ġ@ Synchron ized ĊĠ Ġoverride Ġfun Ġdisconnect () Ġ{ ĊĠĠĠ Ġif Ġ( this . web Socket Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġthis . web Socket !!. disconnect () ĊĠĠĠĠĠ Ġthis . web Socket !!. remove Listener ( this . listener ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġthis . web Socket Ġ= Ġnull ĊĠĠĠ Ġthis . listener Ġ= Ġnull ĊĠ Ġ} ĊĊĠ Ġ@ Throws ( Exception :: class ) ĊĠ Ġprivate Ġfun Ġget Address (): ĠString Ġ{ ĊĠĠĠ Ġval Ġenvironment Ġ= Ġpreferences . environment Ġ?: Ġthrow ĠNullPointerException (" Environment Ġis Ġnot Ġset !") ĊĠĠĠ Ġval Ġaccess Ġ= Ġauth enticator . refresh Token () Ġ?: Ġthrow ĠNullPointerException (" Unable Ġto Ġacquire Ġauthorization ") ĊĠĠĠ Ġval Ġoriginal Ġ= ĠUri . parse ( environment . wss ) ĊĠĠĠ Ġval Ġout Ġ= ĠUri . parse ( environment . wss ). build Up on (). clear Query () ĊĊĠĠĠ Ġout . append QueryParameter (" app _ id ", Ġenvironment . appId ) ĊĠĠĠ Ġout . append QueryParameter (" token ", Ġaccess . token ) ĊĊĠĠĠ Ġfor Ġ( param Ġin Ġoriginal . query Parameter Names ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( param Ġ!= Ġ" token " Ġ|| Ġparam Ġ!= Ġ" app _ id ") Ġ{ ĊĠĠĠĠĠĠĠ Ġout . append QueryParameter ( param , Ġoriginal . getQuery Parameter ( param )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġout . build (). toString () ĊĠ Ġ} Ċ Ċ }