package Ġcom . sg hd . common . socket . filter . session Ċ Ċ import Ġme . j inu o . im f . websocket . handler . Dispatcher Ċ import Ġme . j inu o . im f . websocket . session . Session Ċ import Ġme . j inu o . im f . websocket . session . Session Manager Ċ import Ġjava . lang . reflect . Invocation Handler Ċ import Ġjava . lang . reflect . Proxy Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ Ċ /** Ċ Ġ* Ġ åıĳéĢģ ä»£çĲĨ å·¥ åİĤ Ċ Ġ*/ Ċ class ĠPush Proxy Factory ( manager : ĠSession Manager < Any , ĠSession >, Ġdispatcher : ĠDispatcher ) Ġ{ ĊĠĠĠ Ġ/** Ġ åĬ¨æĢģ ä»£çĲĨ å¤ĦçĲĨ åĻ¨ Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġinvok er : ĠInvocation Handler Ġ= ĠTODO () ĊĠĠĠ Ġprivate Ġval Ġdispatcher : ĠDispatcher ĊĠĠĠ Ġprivate Ġval Ġmanager : ĠSession Manager < Any , ĠSession > ĊĠĠĠ Ġ/** Ġ ä»£çĲĨ å®ŀä¾ĭ ç¼ĵåŃĺ Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġcaches Ġ= ĠConcurrent HashMap < Class <* >, ĠAny >() ĊĠĠĠ Ġ/** ĠéľĢè¦ģ åıĳéĢģ çļĦ SESSION Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġsessions : ĠThread Local < Array < Session >> Ġ= ĠThread Local < Array < Session >>() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® åıĳéĢģ SESSION ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Sessions ( sessions : ĠArray < Session >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . sessions . set ( sessions ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åıĳéĢģ è¯·æ±Ĥ æ¶Īæģ¯ ĊĠĠĠĠ Ġ* Ġ@ param Ġrequest ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsend ( request : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsessions : ĠArray < Session > Ġ= Ġsessions . get () Ċ // ĠĠĠĠĠĠĠ Ġmanager . send ( request , Ġsessions ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ ä»£çĲĨ å®ŀä¾ĭ ĊĠĠĠĠ Ġ* Ġ@ param Ġcl z ĊĠĠĠĠ Ġ* Ġ@ param Ġsessions ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T > Ġget Proxy ( cl z : ĠClass < T >, Ġvar arg Ġsessions : ĠSession ): ĠT Ġ{ Ġ// Ġè®¾ç½® åıĳéĢģ SESSION ĊĠĠĠĠĠĠĠ Ġset Sessions ( sessions Ġas ĠArray < Session >) ĊĠĠĠĠĠĠĠ Ġ// Ġ åħĪ ä»İ ç¼ĵåŃĺ èİ·åıĸ ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= Ġcaches [ cl z ] Ġas ĠT ? ĊĠĠĠĠĠĠĠ Ġif Ġ( obj Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġobj ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ æ³¨åĨĮ æİ¥åı£ ĊĠĠĠĠĠĠĠ Ġ// dispatcher . register Interface ( cl z ) ĊĠĠĠĠĠĠĠ Ġ// Ġ æŀĦå»º æĸ° ä»£çĲĨ å¹¶ æĶ¾ ç½® åĪ° ç¼ĵåŃĺ ĊĠĠĠĠĠĠĠ Ġval Ġinst Ġ= ĠProxy . new Proxy Instance ( cl z . class Loader , ĠarrayOf < Class < *> >( cl z ), Ġinvok er ) Ġas ĠT ĊĠĠĠĠĠĠ Ġ// Ġcaches [ cl z ] Ġ= Ġinst ĊĠĠĠĠĠĠĠ Ġreturn Ġinst ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . dispatcher Ġ= Ġdispatcher ĊĠĠĠĠĠĠĠ Ġthis . manager Ġ= Ġmanager ĊĠĠĠĠĠĠ Ġ// Ġinvok er Ġ= ĠPush Proxy Invoker < Any >( this ) ĊĠĠĠ Ġ} Ċ }