package Ġpl . socket byte . th ous and . server . netty Ċ Ċ import Ġio . netty . channel . Channel HandlerContext Ċ import Ġio . netty . channel . Simple Channel Inbound Handler Ċ import Ġio . netty . handler . timeout . TimeoutException Ċ import Ġio . netty . handler . timeout . Write TimeoutException Ċ import Ġpl . socket byte . th ous and . server . core . Player Ċ import Ġpl . socket byte . th ous and . server . game Ċ import Ġpl . socket byte . th ous and . server . println Sync Ċ import Ġpl . socket byte . th ous and . shared . RED Ċ import Ġpl . socket byte . th ous and . shared . YELLOW _ BR IGHT Ċ import Ġpl . socket byte . th ous and . shared . netty . Net ty Listener Ċ import Ġpl . socket byte . th ous and . shared . packet . Packet Ċ import Ġpl . socket byte . th ous and . shared . packet . Packet Player Login Ċ import Ġpl . socket byte . th ous and . shared . packet . Packet SendMessage Ċ import Ġpl . socket byte . th ous and . shared . packet . data . MessageType Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ class ĠNet ty Channel Handler ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġserver : ĠNet ty Server , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlisteners : ĠList < Net ty Listener >) ĊĠĠĠ Ġ: ĠSimple Channel Inbound Handler < Any >() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġchannel Active ( ctx : ĠChannel HandlerContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( server . clients . size Ġ>= Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver . write ( ctx . channel (), ĠPacket SendMessage ( MessageType . PRINT _ LINE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRED Ġ+ Ġ" Server Ġis Ġfull ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . disconnect () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġserver . add Client ( ctx . channel ()) ĊĠĠĠĠĠĠĠ Ġval Ġplayer Id Ġ= Ġserver . clients . size Ġ- Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġserver . exec utors . schedule ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( game . getPlayer ( player Id ) Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġplayer Ġnot Ġauthorized Ġin Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserver . write ( ctx . channel (), ĠPacket SendMessage ( MessageType . PRINT _ LINE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠY ELLOW _ BR IGHT Ġ+ Ġ" You Ġwere Ġdisconnected Ġfrom Ġthe Ġserver Ġbecause Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" you Ġdid Ġnot Ġenter Ġyour Ġname Ġin Ġtime Ġ( 2 0 Ġsec ), Ġplease Ġtry Ġagain .")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . channel (). disconnect () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, Ġ 2 0 , ĠTimeUnit . SECONDS ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġchannel Inactive ( ctx : ĠChannel HandlerContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġserver . remove Client ( ctx . channel ()) ĊĊĠĠĠĠĠĠĠ Ġprintln Sync (" Client Ġ${ ctx . channel (). remote Address ()} Ġleft Ġthe Ġgame . Ġ(${ server . clients . size }/ 4 )") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexception Ca ught ( ctx : ĠChannel HandlerContext , Ġcause : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( cause Ġis ĠWrite TimeoutException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln Sync ("${ ctx . channel (). remote Address ()} Ġtimeout ed .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver . remove Client ( ctx . channel ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . disconnect () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġchannel Read 0 ( ctx : ĠChannel HandlerContext , Ġmsg : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( msg Ġ! is ĠPacket ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif Ġ( msg Ġis ĠPacket Player Login ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname : ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( msg . name Ġ== Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Player Ġ" Ġ+ Ġ( server . clients . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġmsg . name ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplayer Ġ= Ġgame . add Player ( Player ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( server . clients . size Ġ- Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . channel (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . channel (). id (). as Short Text ())) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln Sync (" Player Ġ$ name Ġjoined Ġthe Ġgame Ġ(${ server . clients . size }/ 4 )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame . clear Screen ( player ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame . broadcast Println ( YELLOW _ BR IGHT Ġ+ Ġ" Player Ġ$ name Ġjoined Ġthe Ġgame Ġ(${ server . clients . size }/ 4 )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( adapter Ġin Ġlisteners ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . received ( ctx . channel (), Ġmsg ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġchannel Read Complete ( ctx : ĠChannel HandlerContext ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġctx ?. flush () ĊĠĠĠ Ġ} Ċ }