package Ġcom . the one . web . netty Ċ Ċ import Ġcom . the one . core . util . Random Utils Ċ import Ġcom . the one . web . proto . One Test Proto Ċ import Ġcom . the one . web . util . Redis Dao Ċ import Ġio . netty . channel . Channel Handler Ċ import Ġio . netty . channel . Channel HandlerContext Ċ import Ġio . netty . channel . Simple Channel Inbound Handler Ċ import Ġio . netty . channel . group . Channel Group Ċ import Ġio . netty . channel . group . Default Channel Group Ċ import Ġio . netty . handler . codec . http . websocket x . Text WebSocket Frame Ċ import Ġio . netty . util . concurrent . Global Event Executor Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . stereotype . Service ĊĊ Ċ /** Ċ Ġ* Ġ@ Author ĠA aron Ċ Ġ* Ġ@ Date Ġ 2 0 1 8 - 1 2 - 2 9 Ċ Ġ* Ġ@ Email Ġa aron @ magic window . cn Ċ Ġ* Ġ@ Description Ċ Ġ*/ Ċ @ Service (" netty Server Handler ") Ċ @ Channel Handler . Sh arable Ċ class ĠNet ty Server Handler Ġ: ĠSimple Channel Inbound Handler < One Test Proto . One Test >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" Server Channel Handler " ĊĠĠĠ Ġvar Ġchannels : ĠChannel Group Ġ= ĠDefault Channel Group ( Global Event Executor . INSTANCE ) ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġredis Dao : ĠRedis Dao ĊĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġchannel Read 0 ( channel HandlerContext : ĠChannel HandlerContext , Ġtest : ĠOne Test Proto . One Test ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠOne Test Proto . One Test . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set TestId ( test . getTest Id ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" aar on Ġtitle :" Ġ+ Ġtest . getTitle ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent (" aar on Ġcontent :" Ġ+ Ġtest . getContent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġchannel HandlerContext . write And Flush ( res ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġhandler Added ( ctx : ĠChannel HandlerContext ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln ( ctx !!. channel (). remote Address ()) ĊĠĠĠĠĠĠĠ Ġval Ġu Name Ġ= ĠRandom Utils . generate String ( 5 ) Ġ Ġ// çĶ¨æĿ¥ èİ·åıĸ ä¸Ģä¸ª éļıæľº çļĦ çĶ¨æĪ·åĲį ï¼Į åı¯ä»¥ çĶ¨ åħ¶ä»ĸ æĸ¹å¼ı ä»£ æĽ¿ ĊĊĠĠĠĠĠĠĠ Ġval Ġincoming Ġ= Ġctx . channel () ĊĠĠĠĠĠĠĠ Ġfor Ġ( channel Ġin Ġchannels ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠOne Test Proto . One Test . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set TestId ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" aar on Ġtitle :$ u Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent (" aar on Ġcontent :[ æĸ° çĶ¨æĪ· ] Ġ- Ġ$ u Name Ġ åĬłåħ¥ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . write And Flush ( res ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġredis Dao . save String ( incoming . id (). toString () Ġ+ Ġ"", Ġu Name ) ĠĠ Ġ// åŃĺåĤ¨ çĶ¨æĪ· ĊĠĠĠĠĠĠĠ Ġchannels . add ( ctx . channel ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġhandler Removed ( ctx : ĠChannel HandlerContext ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġincoming Ġ= Ġctx !!. channel () ĊĠĠĠĠĠĠĠ Ġval Ġu Name Ġ= Ġredis Dao . getString ( incoming . id (). toString ()) ?: "" ĊĠĠĠĠĠĠĠ Ġfor Ġ( channel Ġin Ġchannels ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠOne Test Proto . One Test . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set TestId ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" aar on Ġtitle :$ u Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent (" aar on Ġcontent :[ æĸ° çĶ¨æĪ· ] Ġ- Ġ$ u Name Ġ ç¦» å¼Ģ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . write And Flush ( res ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġredis Dao . delete String ( incoming . id (). toString ()) ĠĠ Ġ// åĪłéĻ¤ çĶ¨æĪ· ĊĠĠĠĠĠĠĠ Ġredis Dao . save String (" cache Name ", Ġredis Dao . getString (" cache Name ") ?. replace ( u Name , Ġ"") ? :" ") ĠĠ Ġ// æłĩåĩĨ å·²ç»ı ä½¿çĶ¨çļĦ çĶ¨æĪ·åĲį ĊĠĠĠĠĠĠĠ Ġchannels . remove ( ctx . channel ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġchannel Active ( ctx : ĠChannel HandlerContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġincoming Ġ= Ġctx . channel () ĊĠĠĠĠĠĠĠ ĠSystem . out . println (" aar on ĠçĶ¨æĪ· :" Ġ+ Ġredis Dao . getString ( incoming . id (). toString () Ġ+ Ġ"") Ġ+ Ġ" åľ¨ çº¿ ") ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġchannel Inactive ( ctx : ĠChannel HandlerContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġincoming Ġ= Ġctx . channel () ĊĠĠĠĠĠĠĠ ĠSystem . out . println (" aar on ĠçĶ¨æĪ· :" Ġ+ Ġredis Dao . getString ( incoming . id (). toString () Ġ+ Ġ"") Ġ+ Ġ" æİī çº¿ ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġexception Ca ught ( ctx : ĠChannel HandlerContext , Ġcause : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġincoming Ġ= Ġctx . channel () ĊĠĠĠĠĠĠĠ ĠSystem . out . println (" aar on çĶ¨æĪ· :" Ġ+ Ġredis Dao . getString ( incoming . id (). toString () Ġ+ Ġ"") Ġ+ Ġ" å¼Ĥå¸¸ ") ĊĠĠĠĠĠĠĠ Ġcause . printStackTrace () ĊĠĠĠĠĠĠĠ Ġctx . close () ĊĠĠĠ Ġ} Ċ Ċ }