package Ġme . j inu o . im f . websocket . session Ċ Ċ import Ġme . j inu o . im f . websocket . codec . message . Header Ċ import Ġme . j inu o . im f . websocket . codec . message . Message Ċ import Ġme . j inu o . im f . websocket . codec . message . MessageState Ċ import Ġme . j inu o . im f . websocket . definition . Command Ċ import Ġme . j inu o . im f . websocket . handler . Dispatcher Ċ import Ġorg . springframework . web . socket . Binary Message Ċ import Ġorg . springframework . web . socket . Close Status Ċ import Ġorg . springframework . web . socket . WebSocket Session Ċ import Ġjava . net . Inet SocketAddress Ċ import Ġjava . net . URI Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ Ċ /** Ċ Ġ* Ġ@ author Ġfr ank Ċ Ġ* Ġ@ date Ġ 2 0 1 9 - 1 0 - 2 5 Ġ 2 1 : 0 1 Ċ Ġ* Ġ@ desc Ċ Ġ**/ Ċ class ĠDefault Session Ġ: ĠSession Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġid : ĠLong Ġ= Ġ- 1 L ĊĠĠĠ Ġ/** ĠçĶ¨æĪ· èº«ä»½ æłĩè¯Ĩ */ ĊĠĠĠ Ġprivate Ġvar Ġidentity : ĠAny ? Ġ= Ġnull ĊĠĠĠ Ġ/** Ġ åŃĺ æĶ¾ åıĤæķ° */ ĊĠĠĠ Ġprivate Ġvar Ġattr Ġ= ĠConcurrent HashMap < Any , ĠAny >() ĊĠĠĠ Ġ/** Ġ æľĢåĲİ ä¸Ģæ¬¡ æĶ¶ åĮħ æĹ¶éĹ´ */ ĊĠĠĠ Ġprivate Ġvar Ġlast Time : ĠLong Ġ= Ġ- 1 ĊĠĠĠ Ġ/** Ġ è¿ľ ç«¯ åľ°åĿĢ */ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġremote Address : ĠInet SocketAddress ĊĠĠĠ Ġ/** Ġweb Socket Ġä¼ļ è¯Ŀ */ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsession : ĠWebSocket Session ĊĠĠĠ Ġ/** Ġ æĮĩä»¤ åĪĨ åıĳ åĻ¨ */ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdispatcher : ĠDispatcher ĊĠĠĠ Ġ/** Ġsession Manager Ġ ç®¡çĲĨ åĻ¨ */ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsession Manager : ĠSession Manager < *, Ġ*> ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġvalue Of ( id : ĠLong , Ġsession : ĠWebSocket Session , Ġdispatcher : ĠDispatcher , Ġsession Manager : ĠSession Manager < *, Ġ* >): ĠSession Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinstance Ġ= ĠDefault Session () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance . session Ġ= Ġsession ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance . id Ġ= Ġid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance . remote Address Ġ= Ġsession . remote Address !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance . dispatcher Ġ= Ġdispatcher ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance . session Manager Ġ= Ġsession Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinstance ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetId (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġid ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Identity (): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġidentity ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Identity ( identity : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . identity Ġ= Ġidentity ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġ< T > Ġget Attr ( key : ĠAny ): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠ Ġattr [ key ] Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġreturn Ġattr [ key ] Ġas ĠT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Attr ( key : ĠAny , Ġvalue : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire (! attr . containsKey ( key )) Ġ{ Ġ" KEY [ ${ key }] å·² åŃĺåľ¨ " Ġ} ĊĠĠĠĠĠĠĠ Ġattr . put ( key , Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsend ( message : ĠMessage ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcodec Ġ= Ġdispatcher . get Codec () ĊĠĠĠĠĠĠĠ Ġval Ġsend Ġ= Ġcodec . encode ( message ) ĊĠĠĠĠĠĠĠ Ġsend ( send ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsend ( command : ĠCommand , Ġmessage : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsn Ġ= Ġsession Manager . next Sn () ĊĠĠĠĠĠĠĠ Ġval Ġheader Ġ= ĠHeader . valueOf ( sn , ĠMessage State . NORMAL . state , Ġcommand . module , Ġcommand . command ) ĊĠĠĠĠĠĠĠ Ġval Ġbody Array Ġ= Ġdispatcher . encode ( message ) ĊĠĠĠĠĠĠĠ Ġval Ġsend Ġ= ĠMessage . valueOf ( header , Ġbody Array ) ĊĠĠĠĠĠĠĠ Ġsend ( send ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsend ( module : ĠShort , Ġcmd : ĠShort , Ġmessage : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsn Ġ= Ġsession Manager . next Sn () ĊĠĠĠĠĠĠĠ Ġval Ġheader Ġ= ĠHeader . valueOf ( sn , ĠMessage State . NORMAL . state , Ġmodule , Ġcmd ) ĊĠĠĠĠĠĠĠ Ġval Ġbody Array Ġ= Ġdispatcher . encode ( message ) ĊĠĠĠĠĠĠĠ Ġval Ġsend Ġ= ĠMessage . valueOf ( header , Ġbody Array ) ĊĠĠĠĠĠĠĠ Ġsend ( send ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsend ( binary Message : ĠBinary Message ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( session . isOpen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession . sendMessage ( binary Message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalStateException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlast Time (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlast Time ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Last Time ( last Time : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . last Time Ġ= Ġlast Time ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠisActive (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsession . isOpen ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Remote Address (): ĠInet SocketAddress Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġremote Address ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( session . isOpen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession . close ( Close Status . NORMAL ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget WebSocket Session (): ĠWebSocket Session Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsession ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Uri (): ĠURI ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsession . uri ĊĠĠĠ Ġ} Ċ Ċ }