package Ġcom . md ow ds . live depart ures api . helpers Ċ Ċ import Ġcom . google . gson . JsonObject Ċ import Ġcom . google . gson . Json Parser Ċ import Ġokhttp 3 .* Ċ import Ġjava . util . concurrent . TimeUnit ĊĊ Ċ class ĠWebSocket Client Ġ: ĠWebSocket Listener () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠNORMAL _ CLO S URE _ STATUS Ġ= Ġ 1 0 0 0 ĊĊĠĠĠĠĠĠĠ Ġfun Ġconnect (): ĠWebSocket Client Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder (). url (" ws :// localhost : 7 0 0 0 / socket "). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠWebSocket Client () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġok HttpClient Ġ= ĠOk HttpClient . Builder (). read Timeout ( 0 , Ġ ĠTimeUnit . MILLISECONDS ). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweb Socket Ġ= Ġok HttpClient . new WebSocket ( request , Ġclient ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . web Socket Ġ= Ġweb Socket ĊĠĠĠĠĠĠĠĠĠĠĠ Ġok HttpClient . dispatcher (). executor Service (). shutdown () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġclient ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlateinit Ġvar Ġweb Socket : ĠWebSocket ĊĊĠĠĠ Ġvar ĠisOpen Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġval Ġmessages Ġ= Ġmutable ListOf < JsonObject >() ĊĊĠĠĠ Ġval Ġstop Points Messages : ĠList < JsonObject > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmessages OfType (" STOP _ POINTS ") ĊĊĠĠĠ Ġval Ġdepart ures Messages : ĠList < JsonObject > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmessages OfType (" DEP ART URE S ") ĊĊĠĠĠ Ġfun Ġlast Message OfType ( type : ĠString ): ĠJsonObject ? Ġ= Ġmessages . find Last Ġ{ Ġit . get (" type "). asString Ġ== Ġtype Ġ} ĊĊĠĠĠ Ġfun Ġclear Messages () Ġ= Ġmessages . clear () ĊĊĠĠĠ Ġfun Ġsend Location ( lat : ĠDouble , Ġlong : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġweb Socket . send (""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype : Ġ" LOCATION ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage : Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation : Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlat : Ġ$ lat , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlong : Ġ$ long ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ"" ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsend Mode ( mode : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġweb Socket . send (""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype : Ġ" MODE ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage : Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmode : Ġ$ mode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ"" ") ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġweb Socket . close ( 1 0 0 0 , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Open ( web Socket : ĠWebSocket , Ġresponse : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠ ĠisOpen Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Message ( web Socket : ĠWebSocket , Ġtext : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmessages . add ( Json Parser (). parse ( text ). as JsonObject ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Closing ( web Socket : ĠWebSocket , Ġcode : ĠInt , Ġreason : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġweb Socket . close ( NORMAL _ CLO S URE _ STATUS , Ġnull ) ĊĠĠĠĠĠĠĠ ĠisOpen Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Failure ( web Socket : ĠWebSocket , Ġt : ĠThrowable , Ġresponse : ĠResponse ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Error !") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmessages OfType ( type : ĠString ): ĠList < JsonObject > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessages . filter Ġ{ Ġit . get (" type "). asString Ġ== Ġtype Ġ} Ċ }