package Ġqu anti . com . kotlin log . web logger . websocket Ċ Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġokhttp 3 . Request Ċ import Ġokhttp 3 . Response Ċ import Ġokhttp 3 . WebSocket Ċ import Ġokhttp 3 . WebSocket Listener Ċ import Ġok io . ByteString Ċ import Ġqu anti . com . kotlin log . utils . log a Ċ import Ġqu anti . com . kotlin log . web logger . I Web Logger Entity Sender Ċ import Ġqu anti . com . kotlin log . web logger . I Web Logger Entity Sender . Companion . client Ċ import Ġqu anti . com . kotlin log . web logger . I Web Logger Entity Sender . Companion . gson Ċ import Ġqu anti . com . kotlin log . web logger . entity . Web Logger Entity Ċ import Ġqu anti . com . kotlin log . web logger . rest . I Server Active Ċ Ċ class ĠWebSocket Sender ( url : ĠString ) ĊĠĠĠ Ġ: ĠWebSocket Listener (), ĠI Web Logger Entity Sender Ġ{ ĊĊĊĠĠĠ Ġprivate Ġval Ġws : ĠWebSocket ĊĠĠĠ Ġprivate Ġvar Ġconnected Ġ: ĠBoolean ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcallback Ġ: ĠI Server Active ? Ġ= Ġnull ĊĊĊĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder (). url ( url ). build () ĊĠĠĠĠĠĠĠ Ġws Ġ= Ġclient . new WebSocket ( request , Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsend ( entity : ĠWeb Logger Entity ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġserialized Entity Ġ= Ġgson . toJson ( array ListOf ( entity )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġws . send ( serialized Entity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsend Sync ( entity : ĠWeb Logger Entity ) Ġ= Ġsend ( entity ) ĊĊĠĠĠ Ġoverride Ġfun Ġcheck Connection ( callback : ĠI Server Active , Ġcheck Connection Entity : ĠArrayList < Web Logger Entity >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( connected Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . is Server Active ( connected !! ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . callback Ġ= Ġcallback ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclean () Ġ{ ĊĠĠĠĠĠĠĠ Ġws . close ( NORMAL _ CLO S URE _ STATUS , Ġ" Client Ġrequested Ġto Ġend Ġstream .") ĊĠĠĠĠĠĠĠ Ġconnected Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Open ( web Socket : ĠWebSocket ?, Ġresponse : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconnected Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġlog a ( TAG , Ġ" WS Ġopen Ġ: ", Ġresponse . message ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( callback Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ?. is Server Active ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Message ( web Socket : ĠWebSocket , Ġtext : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog a ( TAG , Ġ" Re ceiving Ġ: ", Ġtext ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Message ( web Socket : ĠWebSocket , Ġbytes : ĠByte String ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog a ( TAG , Ġ" Re ceiving Ġbytes Ġ: Ġ" Ġ+ Ġbytes . hex ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Closing ( web Socket : ĠWebSocket , Ġcode : ĠInt , Ġreason : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġweb Socket . close ( NORMAL _ CLO S URE _ STATUS , Ġnull ) ĊĠĠĠĠĠĠĠ Ġlog a ( TAG , Ġ" Closing Ġ: Ġ$ code Ġ/ Ġ$ reason ") ĊĠĠĠĠĠĠĠ Ġconnected Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Failure ( web Socket : ĠWebSocket ?, Ġt : ĠThrowable , Ġresponse : ĠResponse ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġconnected Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġlog a ( TAG , Ġ" Error Ġ: Ġ" Ġ+ Ġt . message ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( callback Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ?. is Server Active ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" WebSocket Sender " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠNORMAL _ CLO S URE _ STATUS Ġ= Ġ 1 0 0 0 ĊĠĠĠ Ġ} Ċ }