// ĠCopyright Ġ 2 0 1 9 - 2 0 2 0 ĠThe ĠH ush Ġdevelopers Ċ package Ġorg . my h ush . silent dragon Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . util . Log Ċ import Ġcom . be ust . kl ax on . Json Ċ import Ġcom . be ust . kl ax on . JsonObject Ċ import Ġcom . be ust . kl ax on . json Ċ import Ġokhttp 3 .* Ċ import Ġok io . ByteString Ċ import Ġorg . json . JSONObject Ċ import Ġjava . lang . Exception Ċ import Ġjava . net . Connect Exception Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġkotlin . collections . HashMap ĊĊ Ċ object ĠConnection Manager Ġ{ ĊĊĠĠĠ Ġval ĠDATA _ SIGNAL : ĠString Ġ= Ġ" ConnectionManager _ New Data _ Signal " ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRefresh Ġall Ġdata , Ġincluding Ġattempting Ġa Ġconnection Ġif Ġnone Ġexists ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrefresh All Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠFirst , Ġtry Ġto Ġmake Ġa Ġconnection . ĊĠĠĠĠĠĠĠ Ġmake Connection () ĊĠĠĠĠĠĠĠ Ġinit C urrencies () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠAttempt Ġa Ġconnection Ġto Ġthe Ġserver . ĠIf Ġthere Ġis Ġno Ġsaved Ġconnection , Ġwe 'll Ġset Ġthe Ġconnection Ġstatus ĊĠĠĠ Ġ// Ġto ĠNone ĊĠĠĠ Ġprivate Ġfun Ġmake Connection ( direct Conn Ġ: ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconn String Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . get Conn String ( Sil ent Dragon App . app Context !! ) ĊĠĠĠĠĠĠĠ Ġif Ġ( conn String . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġuser Ġmight Ġhave Ġjust Ġdisconnected , Ġso Ġmake Ġsure Ġwe Ġare Ġdisconnected ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . ws ?. close ( 1 0 0 0 , Ġ" disconnected ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Update Data Signal ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprintln (" Make Connection ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġstill Ġconnecting , Ġthis Ġis Ġa Ġduplicate Ġcall , Ġso Ġdo Ġnothing Ġbut Ġwait . ĊĠĠĠĠĠĠĠ Ġif Ġ( DataModel . conn Status Ġ== ĠData Model . Connection Status . CONNECT ING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġalready Ġconnected , Ġthen Ġrefresh Ġdata ĊĠĠĠĠĠĠĠ Ġif Ġ( DataModel . conn Status Ġ== ĠData Model . Connection Status . CONNECTED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . make APIC alls () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprintln (" At tempting Ġnew Ġconnection Ġ${ DataModel . conn Status }") ĊĠĠĠĠĠĠĠ Ġsend Refresh Signal ( false ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġdirect Ġconnection , Ġthen Ġconnect Ġto Ġthe ĠURL Ġin Ġconnection Ġstring ĊĠĠĠĠĠĠĠ Ġif Ġ( direct Conn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġstatus Ġto Ġconnecting , Ġso Ġwe Ġcan Ġupdate Ġthe ĠUI ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . conn Status Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . Connection Status . CONNECT ING ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Conn status Ġ= Ġconnecting ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠOk HttpClient . Builder (). connect Timeout ( 2 , ĠTimeUnit . SECONDS ). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder (). url ( conn String ). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= ĠWeb socket Client ( true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . ws Ġ= Ġclient . new WebSocket ( request , Ġlistener ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠConnect Ġto Ġthe Ġw orm hole ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . conn Status Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . Connection Status . CONNECT ING ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Conn status Ġ= Ġconnecting ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠOk HttpClient . Builder (). connect Timeout ( 5 , ĠTimeUnit . SECONDS ). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder (). url (" wss :// w orm hole . my h ush . org : 4 4 3 "). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// val Ġrequest Ġ= ĠRequest . Builder (). url (" ws :// 1 9 2 . 1 6 8 . 5 . 1 8 7 : 7 0 7 0 "). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= ĠWeb socket Client ( false ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . ws Ġ= Ġclient . new WebSocket ( request , Ġlistener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclose Connection () Ġ{ ĊĠĠĠĠĠĠĠ ĠData Model . ws ?. close ( 1 0 0 0 , Ġ" Close Ġrequested ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsend Refresh Signal ( finished : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġi Ġ= ĠIntent ( DATA _ SIGNAL ) ĊĠĠĠĠĠĠĠ Ġi . putExtra (" action ", Ġ" refresh ") ĊĠĠĠĠĠĠĠ Ġi . putExtra (" finished ", Ġfinished ) ĊĠĠĠĠĠĠĠ ĠSil ent Dragon App . app Context ?. send Broadcast ( i ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsend Update Data Signal ( update Tx ns : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġi Ġ= ĠIntent ( DATA _ SIGNAL ) ĊĠĠĠĠĠĠĠ Ġi . putExtra (" action ", Ġ" new data ") ĊĠĠĠĠĠĠĠ Ġi . putExtra (" update Tx ns ", Ġupdate Tx ns ) ĊĠĠĠĠĠĠĠ ĠSil ent Dragon App . app Context ?. send Broadcast ( i ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsend Error Signal ( msg : ĠString ? Ġ= Ġnull , Ġdo Disconnect : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġi Ġ= ĠIntent ( DATA _ SIGNAL ) ĊĠĠĠĠĠĠĠ Ġi . putExtra (" action ", Ġ" error ") ĊĠĠĠĠĠĠĠ Ġi . putExtra (" msg ", Ġmsg ) ĊĠĠĠĠĠĠĠ Ġi . putExtra (" do Disconnect ", Ġdo Disconnect ) ĊĠĠĠĠĠĠĠ ĠSil ent Dragon App . app Context ?. send Broadcast ( i ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġinit C urrencies (){ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . currency Symbols [" AUD "] Ġ= Ġ"$ " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . currency Symbols [" CAD "] Ġ= Ġ"$ " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . currency Symbols [" CN Y "] Ġ= Ġ" Â ¥ " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . currency Symbols [" EUR "] Ġ= Ġ" â Ĥ¬ " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . currency Symbols [" GBP "] Ġ= Ġ" Â £ " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . currency Symbols [" J PY "] Ġ= Ġ" Â ¥ " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . currency Symbols [" K RW "] Ġ= Ġ" âĤ © " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . currency Symbols [" MX N "] Ġ= Ġ"$ " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . currency Symbols [" MY R "] Ġ= Ġ" RM " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . currency Symbols [" PHP "] Ġ= Ġ" âĤ ± " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . currency Symbols [" PK R "] Ġ= Ġ" â Ĥ¨ " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . currency Symbols [" R UB "] Ġ= Ġ" âĤ ½ " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . currency Symbols [" SG D "] Ġ= Ġ"$ " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . currency Symbols [" THB "] Ġ= Ġ" à¸ ¿ " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . currency Symbols [" USD "] Ġ= Ġ"$ " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . currency Symbols [" VE F "] Ġ= Ġ" Bs " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . currency Symbols [" V ND "] Ġ= Ġ" âĤ « " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . currency Symbols [" Z AR "] Ġ= Ġ" R " ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠOk HttpClient () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc urrencies Ġ= Ġ" usd , eur , j py , btc , cn y , rub , cad , sg d , ch f , in r , gb p , aud , pk r , mx n , php , vnd , th b , z ar , k rw , my r , ve f " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest : ĠRequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// api . co inge cko . com / api / v 3 / simple / price ? ids = h ush & vs _ currencies =${ currencies }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse : ĠResponse Ġ= Ġclient . new Call ( request ). execute () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson : ĠJSONObject Ġ= ĠJSONObject ( response . body ()?. string ()) [" h ush "] Ġas ĠJSONObject ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( json . length () Ġ> Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( cur : ĠString Ġin Ġjson . keys ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . currency Values [ cur . toUpperCase ()] Ġ= Ġjson . getDouble ( cur ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! DataModel . currency Symbols . containsKey ( cur . toUpperCase ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . currency Symbols [ cur . toUpperCase ()] Ġ= Ġcur . toUpperCase () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. start () ĊĊĊĊĠĠĠĠĠĠĠ Ġ} catch Ġ( e : ĠException ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠWeb socket Client Ġ( direct Conn : ĠBoolean ) Ġ: ĠWebSocket Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm _ direct Conn Ġ= Ġdirect Conn ĊĠĠĠĠĠĠĠ Ġval ĠTAG Ġ= Ġ" Websocket Client " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Open ( web Socket : ĠWebSocket , Ġresponse : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Opened ĠWeb socket ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . conn Status Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . Connection Status . CONNECTED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Conn status Ġ= Ġconnected ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġdirect Ġconnection , Ġstart Ġmaking ĠAPI Ġcalls Ġto Ġget Ġdata . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m _ direct Conn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . make APIC alls () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthis Ġis Ġa Ġconnection Ġto Ġw orm hole , Ġwe Ġhave Ġto Ġregister Ġourselves Ġbefore Ġwe Ġmake Ġany ĠAPI Ġcalls ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! DataModel . get W orm hole Code (). isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweb Socket . send ( Ġjson Ġ{ Ġobj ( Ġ" register " Ġto ĠData Model . get W orm hole Code ()) Ġ}. toJson String ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDelay Ġsending Ġthe ĠAPI Ġcalls Ġa Ġbit Ġto Ġlet Ġthe Ġregister Ġcall Ġfinish ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimer (). schedule ( object Ġ: ĠTimer Task () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . make APIC alls () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}}, Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Update Data Signal () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Message ( web Socket : ĠWebSocket ?, Ġtext : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Re ceiving Ġ$ text ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ġ= ĠData Model . parse Response ( text !! ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( r . display Msg Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Error Signal ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr . display Msg , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr . do Disconnect ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( r . do Disconnect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġdon 't Ġpass Ġa Ġreason Ġhere , Ġbecause Ġwe Ġalready Ġsent Ġthe Ġerror Ġsignal Ġabove ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweb Socket ?. close ( 1 0 0 0 , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Update Data Signal ( r . update Tx ns ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Refresh Signal ( r . update Tx ns ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Message ( web Socket : ĠWebSocket ?, Ġbytes : ĠByte String ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Re ceiving Ġbytes Ġ: Ġ" Ġ+ Ġbytes . hex ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Closing ( web Socket : ĠWebSocket , Ġcode : ĠInt , Ġreason : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . conn Status Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . Connection Status . DIS CONNECTED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Conn status Ġ= Ġdisconnected ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG ," Closing Ġ: Ġ$ code Ġ/ Ġ$ reason ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// if Ġ(! reason . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠ Ġsend Error Signal ( reason , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ//} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Refresh Signal ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( web Socket : ĠWebSocket , Ġt : ĠThrowable , Ġresponse : ĠResponse ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG ," Failed Ġ$ t ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . conn Status Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Model . Connection Status . DIS CONNECTED ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġallow Internet Ġ= ĠData Model . get Allow Internet () Ġ&& ĠData Model . getGlobal Allow Internet () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġconnection Ġis Ġdirect , Ġand Ġthere Ġis Ġno Ġneed Ġto Ġfurther Ġconnect , Ġso Ġjust Ġerror Ġout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( t Ġis ĠConnect Exception Ġ&& Ġ( m _ direct Conn Ġ&& Ġ! allow Internet )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġme sg Ġ= Ġt . localized Message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! DataModel . get Allow Internet ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġme sg Ġ+= Ġ": Ġ" Ġ+ ĠSil ent Dragon App . app Context !!. getString ( R . string . Connecting _ over _ internet _ not _ enabled _ in _ desktop _ node ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! DataModel . getGlobal Allow Internet ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġme sg Ġ+= Ġ": Ġ" Ġ+ ĠSil ent Dragon App . app Context !!. getString ( R . string . Connecting _ over _ internet _ is _ disabled _ in _ settings ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Error Signal ( me sg , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Refresh Signal ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthis Ġwas Ġa Ġdirect Ġconnection Ġand Ġthere Ġwas Ġa Ġfailure Ġto Ġconnect , Ġretry Ġconnecting ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwithout Ġthe Ġdirect Ġconnection Ġ( i . e ., Ġthrough Ġw orm hole ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m _ direct Conn Ġ&& Ġallow Internet ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Connection ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNot Ġa Ġdirect Ġconnection Ġ( or Ġwe 're Ġnot Ġallowed Ġto Ġconnect Ġto Ġinternet ) Ġand Ġthere Ġwas Ġa Ġfailure . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Error Signal ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt . localized Message , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Refresh Signal ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ