/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠGoogle ĠLLC . Ċ Ġ* Ċ Ġ* ĠThis Ġcode Ġmay Ġonly Ġbe Ġused Ġunder Ġthe ĠBSD Ġstyle Ġlicense Ġfound Ġat Ċ Ġ* Ġhttp :// polymer . github . io / LICENSE . txt Ċ Ġ* Ċ Ġ* ĠCode Ġdistributed Ġby ĠGoogle Ġas Ġpart Ġof Ġthis Ġproject Ġis Ġalso Ġsubject Ġto Ġan Ġadditional ĠIP Ġrights Ċ Ġ* Ġgrant Ġfound Ġat Ċ Ġ* Ġhttp :// polymer . github . io / PAT ENTS . txt Ċ Ġ*/ Ċ Ċ package Ġar cs . android . devtools Ċ Ċ import Ġar cs . core . util . Tagged Log Ċ import Ġfi . iki . el onen . Nano HTTP D Ċ import Ġfi . iki . el onen . Nano W SD Ċ import Ġjava . io . IOException Ċ Ċ /** Ċ Ġ* ĠAn Ġextension Ġof Ġ[ Nano W SD ] Ġfor Ġdev tools Ġto Ġconnect ĠArc s Ġto Ġa Ġremote Ġdevice Ġfor Ġdebugging . Ċ Ġ*/ Ċ class ĠDev WebSocket Ġ: ĠN ano W SD ( 1 2 3 4 5 ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġw sd Socket : ĠW sd Socket ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠTag ged Log Ġ{ Ġ" Dev WebSocket " Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSend Ġa Ġstring Ġto Ġthe Ġclient . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsend ( msg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( w sd Socket ?. open Ġ?: Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġw sd Socket ?. send ( msg ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug Ġ{ Ġ" WebSocket ĠClosed , Ġcan 't Ġsend Ġmessage Ġ[ message =$ msg ]. " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġopen WebSocket ( i http Session : ĠN ano HTTP D . I HTTP Session ?): ĠWebSocket Ġ{ ĊĠĠĠĠĠĠĠ Ġw sd Socket Ġ= ĠW sd Socket ( i http Session , Ġlog ) ĊĠĠĠĠĠĠĠ Ġreturn Ġw sd Socket !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO : ĠThis Ġis Ġa ĠWIP Ġfor ĠDev Tools , Ġstill Ġin Ġflux . ĊĠĠĠ Ġprivate Ġclass ĠW sd Socket ( ĊĠĠĠĠĠĠĠ Ġhandshake Request : ĠN ano HTTP D . I HTTP Session ?, ĊĠĠĠĠĠĠĠ Ġval Ġlog : ĠTag ged Log ĊĠĠĠ Ġ) Ġ: ĠWebSocket ( handshake Request ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠP ING _ PAYLOAD Ġ= Ġ" 1 3 3 7 DEAD B EE FC 0 0 1 ". toByteArray () ĊĠĠĠĠĠĠĠ Ġvar Ġopen Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġprotected Ġoverride Ġfun Ġon Open () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend (" Socket ĠOpen ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġping ( PING _ PAYLOAD ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error ( e ) Ġ{ Ġ" Error Ġopening ĠWebSocket Ġ[ message =${ e . message } ]. " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprotected Ġoverride Ġfun ĠonClose ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode : ĠWebSocket Frame . Close Code ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreason : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitiated By Remote : ĠBoolean ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug Ġ{ Ġ" Websocket Ġclosed . Ġ[ reason =$ reason ]. " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprotected Ġoverride Ġfun Ġon Message ( web Socket Frame : ĠWebSocket Frame ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend ( web Socket Frame . getText Payload (). toString () Ġ+ Ġ" Ġto Ġyou ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error ( e ) Ġ{ Ġ" Error Ġreceiving Ġmessage Ġfrom ĠWebSocket Ġ[ message =${ e . message } ]. " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠTo Ġmaintain Ġthe Ġwebsocket Ġconnection , Ġwe Ġneed Ġto Ġmaintain Ġa Ġping / p ong . ĊĠĠĠĠĠĠĠ Ġprotected Ġoverride Ġfun Ġon P ong ( p ong : ĠWebSocket Frame ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġping ( PING _ PAYLOAD ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprotected Ġoverride Ġfun Ġon Exception ( exception : ĠIOException ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error ( exception ) Ġ{ Ġ" Exception Ġwith ĠWeb socket Ġ[ message =${ exception ?. message } ]. " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ