package Ġio . github . tm creative 1 . play w right . remote . engine . transport . impl Ċ Ċ import Ġcom . google . gson . JsonObject Ċ import Ġio . github . tm creative 1 . play w right . remote . core . enums . EventType Ċ import Ġio . github . tm creative 1 . play w right . remote . core . enums . EventType . CLOSE Ċ import Ġio . github . tm creative 1 . play w right . remote . core . exceptions . WebSocket Exception Ċ import Ġio . github . tm creative 1 . play w right . remote . engine . listener . Listener Collection Ċ import Ġio . github . tm creative 1 . play w right . remote . engine . listener . Universal Consumer Ċ import Ġio . github . tm creative 1 . play w right . remote . engine . logger . Custom Logger Ċ import Ġio . github . tm creative 1 . play w right . remote . engine . parser . I Parser . Companion . fromJson Ċ import Ġio . github . tm creative 1 . play w right . remote . engine . parser . I Parser . Companion . toJson Ċ import Ġio . github . tm creative 1 . play w right . remote . engine . transport . api . IT r ansport Ċ import Ġokhttp 3 .* Ċ import Ġjava . util . concurrent . BlockingQueue Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ import Ġjava . util . concurrent . Linked BlockingQueue Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ class ĠWebSocket Transport ( url : ĠString ) Ġ: ĠI Transport Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠCustom Logger () ĊĠĠĠ Ġprivate Ġval Ġincoming Messages Ġ= ĠLinked BlockingQueue < JsonObject >() ĊĠĠĠ Ġprivate Ġval Ġincoming Errors Ġ= ĠConcurrent HashMap < String , ĠException >() ĊĠĠĠ Ġprivate Ġval Ġlast Exception Ġ= ĠException () ĊĠĠĠ Ġprivate Ġval Ġlisteners Ġ= ĠListener Collection < EventType >() ĊĠĠĠ Ġprivate Ġval Ġdefault TimeOut : ĠLong Ġ= Ġ 3 ĊĠĠĠ Ġprivate Ġval Ġclient Ġ= ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠ Ġ. read Timeout ( default TimeOut , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġprivate Ġval Ġweb Socket : ĠWebSocket ĊĠĠĠ Ġprivate Ġval Ġweb Socket Listener Ġ= ĠCustom WebSocket Listener ( incoming Messages , Ġlast Exception , Ġincoming Errors ) ĊĊĠĠĠ Ġprivate Ġclass ĠCustom WebSocket Listener ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġincoming Messages : ĠBlock ing Queue < JsonObject >, ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġlast Exception : ĠException , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġincoming Errors : ĠConcurrent HashMap < String , ĠException > ĊĠĠĠ Ġ) Ġ: ĊĠĠĠĠĠĠĠ ĠWebSocket Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠCustom Logger () ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( web Socket : ĠWebSocket , Ġt : ĠThrowable , Ġresponse : ĠResponse ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Exception Ġ= Ġt Ġas ĠException ĊĠĠĠĠĠĠĠĠĠĠĠ Ġincoming Errors [" error "] Ġ= Ġlast Exception ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . log Info (" RECEIVE Ġerror : Ġ$ last Exception ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Message ( web Socket : ĠWebSocket , Ġtext : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġincoming Messages . add ( fromJson ( text , ĠJsonObject :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . log Receive Message ( text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest : ĠRequest ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠWebSocket Exception (" In appro priate Ġurl : Ġ${ e . message }", Ġe . cause ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġweb Socket Ġ= Ġclient . new WebSocket ( request , Ġweb Socket Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsendMessage ( message : ĠJsonObject ) Ġ{ ĊĠĠĠĠĠĠĠ Ġweb Socket . send ( toJson ( message )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpoll Message ( timeout : ĠLong , Ġtime Unit : ĠTimeUnit ): ĠJsonObject ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! incoming Errors . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠWebSocket Exception ( incoming Errors [" error "] ?. message , Ġincoming Errors [" error "] ?. cause ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġincoming Messages . poll ( timeout , Ġtime Unit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġweb Socket . close ( 1 0 0 0 , Ġ" Normal ĠClosure ") ĊĠĠĠĠĠĠĠ Ġclient . dispatcher . executor Service . shutdown () ĊĠĠĠĠĠĠĠ Ġlogger . log Info (" Active Ġconnection Ġcount : Ġ${ client . connection Pool . connection Count () }") ĊĠĠĠ Ġ} Ċ }