package Ġio . github . chen fe i 0 9 2 8 . util . ret rofit Ċ Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroidx . core . os . post Delayed Ċ import Ġio . github . chen fe i 0 9 2 8 . util . Log Ċ import Ġokhttp 3 .* Ċ Ċ /** Ċ Ġ* ĠWebSocket åŁº ç±» Ċ Ġ* ĠCreated Ġby ĠMr F eng Ġon Ġ 2 0 1 8 / 1 / 1 9 . Ċ Ġ*/ Ċ abstract Ġclass ĠBase WebSocket Client ( ĊĠĠĠ Ġprivate Ġval Ġok HttpClient : ĠOk HttpClient , ĊĠĠĠ Ġprivate Ġval Ġaddress : ĠString , ĊĠĠĠ Ġprivate Ġval Ġkeep Alive Delay : ĠLong Ċ ) Ġ{ ĊĠĠĠ Ġprotected Ġval Ġhandler Ġ= ĠHandler ( Looper . get Main Looper ()) ĊĊĠĠĠ Ġ// Ġ åĨħéĥ¨ çļĦ web Socket ï¼Į åı¯èĥ½ä¼ļ åŃĺåľ¨ æŃ£åľ¨ è¿ŀæİ¥ ä¸Ń æĪĸ æĪĸ æľª åĩĨå¤ĩ å¥½çļĦ æĥħåĨµ ĊĠĠĠ Ġprivate Ġvar Ġ_ socket : ĠWebSocket ? Ġ= Ġnull ĊĊĠĠĠ Ġ// Ġå¦Ĥæŀľ å·²ç»ı æĪĲåĬŁ å»ºç«ĭ è¿ŀæİ¥ åĲİ æīįèĥ½ åıĳéĢģ æ¶Īæģ¯ ĊĠĠĠ Ġprivate Ġvar Ġis Ready Ġ= Ġfalse ĊĊĠĠĠ Ġ// Ġ éĵ¾æİ¥ è¢« çĶ¨æĪ· åħ³éĹŃ èĢĮ éĿŀ åĽł å¼Ĥå¸¸ ä¸Ń æĸŃ æĹ¶ ï¼Į ä¸º true ĊĠĠĠ Ġprivate Ġvar Ġis Closed Ġ= Ġfalse ĊĊĠĠĠ Ġ// Ġå¦Ĥæŀľ è¿ŀæİ¥ åı¯çĶ¨ å¹¶ å·² åĩĨå¤ĩ å¥½ ï¼Į è¿ĶåĽŀ åı¯ çĶ¨çļĦ web Socket ĊĠĠĠ Ġprotected Ġval Ġsocket : ĠWebSocket ? ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Ready ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ socket ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconnect ( auto Retry : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhandler . remove Callbacks And Messages ( TOKEN _ CLOSE ) ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" connect Ġ") ĊĠĠĠĠĠĠĠ Ġ// Ġ æŃ£åľ¨ è¿ŀæİ¥ ä¸Ń æĪĸ å·² å»ºç«ĭ è¿ŀæİ¥ ï¼Į ä¸į å¤ĦçĲĨ ĊĠĠĠĠĠĠĠ Ġif Ġ(_ socket Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ_ socket Ġ= Ġok HttpClient . new WebSocket ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( address ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠWebSocket Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Open ( web Socket : ĠWebSocket , Ġresponse : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Open ( web Socket , Ġresponse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ socket Ġ= Ġweb Socket ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" on Open Ġ$ response ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éĵ¾æİ¥ èģ Ĭ å¤© å®¤ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Base WebSocket Client . on Open ( web Socket ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æłĩè®° å·² å°± ç» ª ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Ready Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ä¿Ŀ æ´» ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Send KeepAlive Delay () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( web Socket : ĠWebSocket , Ġt : ĠThrowable , Ġresponse : ĠResponse ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Failure ( web Socket , Ġt , Ġresponse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" on Failure Ġ", Ġt ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ socket Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Ready Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . remove Callbacks And Messages ( TOKEN _ CONNECT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . remove Callbacks And Messages ( TOKEN _ CLOSE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . remove Callbacks And Messages ( TOKEN _ SEND _ MSG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ è¿ŀæİ¥ å¤±è´¥ ï¼Į éĩį è¿ŀ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Closed Ġ&& Ġauto Retry ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post Delayed ( 1 0 0 0 L , ĠTOKEN _ CONNECT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnect ( auto Retry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Message ( web Socket : ĠWebSocket , Ġtext : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Message ( web Socket , Ġtext ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" on Message : Ġ$ text ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Msg ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Closing ( web Socket : ĠWebSocket , Ġcode : ĠInt , Ġreason : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Closing ( web Socket , Ġcode , Ġreason ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweb Socket . close ( 1 0 0 0 , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Closed ( web Socket : ĠWebSocket , Ġcode : ĠInt , Ġreason : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Closed ( web Socket , Ġcode , Ġreason ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" on Closed Ġ$ code Ġ$ reason ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ socket Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Ready Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . remove Callbacks And Messages ( TOKEN _ CONNECT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . remove Callbacks And Messages ( TOKEN _ CLOSE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . remove Callbacks And Messages ( TOKEN _ SEND _ MSG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ è¿ŀæİ¥ å¤±è´¥ ï¼Į éĩį è¿ŀ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Closed Ġ&& Ġauto Retry ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post Delayed ( 1 0 0 0 L , ĠTOKEN _ CONNECT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnect ( auto Retry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åıĳéĢģ ä¿Ŀ æ´» çļĦ å»¶ æĹ¶ æ¶Īæģ¯ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġpost Send KeepAlive Delay () Ġ{ ĊĠĠĠĠĠĠĠ Ġhandler . post Delayed ( keep Alive Delay , ĠTOKEN _ SEND _ MSG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsocket ?. send ( keep Alive Msg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Send KeepAlive Delay () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclose ( delay : ĠLong Ġ= Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ å»¶ æĹ¶ åħ³éĹŃ ĊĠĠĠĠĠĠĠ Ġif Ġ( delay Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post Delayed ( delay , ĠTOKEN _ CLOSE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ åħ³éĹŃ éĵ¾æİ¥ ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" close Ġ") ĊĠĠĠĠĠĠĠ Ġsocket ?. close ( 1 0 0 0 , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ_ socket Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġis Ready Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġis Closed Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġon Open ( web Socket : ĠWebSocket ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ä¿Ŀ æ´» çļĦ å¿ĥ è·³ åĮħ åĨħå®¹ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġval Ġkeep Alive Msg : ĠString ĊĊĠĠĠ Ġabstract Ġfun Ġparse Msg ( text : ĠString ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" KW _ Base WebSocket Client " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTOKEN _ CLOSE Ġ= Ġ" close " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTOKEN _ CONNECT Ġ= Ġ" connect " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTOKEN _ SEND _ MSG Ġ= Ġ" send Msg " ĊĠĠĠ Ġ} Ċ }