package Ġio . su y ong . k ak ao bridge . network Ċ Ċ import Ġandroid . util . Log Ċ import Ġio . socket . client . IO Ċ import Ġio . socket . client . Socket Ċ import Ġio . su y ong . k ak ao bridge . MainActivity Ċ import Ġio . su y ong . k ak ao bridge . logger . Log Type Ċ import Ġio . su y ong . k ak ao bridge . logger . Logger Ċ import Ġorg . json . JSONObject Ċ import Ġjava . lang . Exception Ċ Ċ object ĠNetwork Manager Ġ{ ĊĠĠĠ Ġvar Ġurl : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġprivate Ġvar Ġsocket : ĠSocket ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġmap Ġ= ĠHashMap < String , ĠMutable List <( JSONObject ) Ġ-> ĠUnit >>() ĊĊĠĠĠ Ġfun Ġconnect ( url : ĠString ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . url Ġ= Ġurl Ġ?: Ġthis . url ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsocket Ġ= ĠIO . socket ( this . url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . add ( Log Type . INFO , Ġ" Network Ġmanager Ġstarted ", Ġ" url : Ġ${ this . url }") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . add ( Log Type . ERROR , Ġ" Failed Ġto Ġstart Ġnetwork Ġmanager ", Ġerror . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdisconnect () Ġ{ ĊĠĠĠĠĠĠĠ Ġemit ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" unregister - client ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġ" bridge " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġsocket ?. disconnect () ĊĠĠĠĠĠĠĠ ĠLogger . add ( Log Type . INFO , Ġ" Network Ġmanager Ġstopped ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġemit ( event : ĠString , Ġobj : ĠMap < String , ĠString >? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( obj Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJSONObject () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson . put (" uuid ", ĠMainActivity . uuid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( element Ġin Ġobj ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . put ( element . key , Ġelement . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsocket ?. emit ( event , Ġjson ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsocket ?. emit ( event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon ( event : ĠString , Ġfunc : Ġ( data : ĠJSONObject ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmap . get Or Put ( event ) Ġ{ Ġmutable ListOf () Ġ}. add ( func ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġsocket ?. let Ġ{ Ġio Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġio . on ( Socket . EVENT _ CONNECT ) Ġ{ Ġdata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJSONObject () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ Socket . EVENT _ CONNECT ]?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . invoke ( json ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" register - client ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġ" bridge " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . add ( Log Type . DEBUG , Ġ" Server Ġconnected ", Ġdata . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġio . on (" send ") Ġ{ Ġdata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJSONObject ( data [ 0 ]. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [" send "] ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . invoke ( json ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġio . on ( Socket . EVENT _ DIS CONNECT ) Ġ{ Ġdata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJSONObject () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ Socket . EVENT _ DIS CONNECT ]?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . invoke ( json ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . add ( Log Type . DEBUG , Ġ" Server Ġdisconnected ", Ġdata . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġio . connect () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }