@ file : Suppress (" UN CHECK ED _ CAST ") Ċ Ċ package Ġkon em . protocol . socket . json Ċ Ċ import Ġjava . net . SocketAddress Ċ import Ġkon em . data . json . Kon em Message Ċ import Ġkon em . data . json . Kon em Message Serializer Ċ import Ġkon em . netty . stream . Trans ceiver Ċ import Ġorg . slf 4 j . LoggerFactory Ċ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ class ĠJson Trans ceiver ( channel Port : ĠInt ) Ġ: ĠTrans ceiver < Kon em Message , ĠString >( channel Port ) Ġ{ ĊĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Json Trans ceiver :: class . java ) ĊĠ Ġprivate Ġval Ġserializer Ġ= ĠKon em Message Serializer () ĊĊĠ Ġfun Ġhandle Message ( addr : ĠSocket Address , Ġmessage : ĠKon em Message ) Ġ{ ĊĠĠĠ Ġlogger . trace (" from Ġ{} Ġwith Ġ{}", Ġaddr , Ġmessage ) ĊĠĠĠ Ġval Ġreader Ġ= Ġchannel Read ers [ addr ] Ġas ĠJson Channel Reader < Kon em Message > ĊĠĠĠ Ġreader . handle Channel Read ( addr , Ġchannel Port , Ġmessage ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠSends Ġa Ġmessage Ġto Ġspecified Ġaddress Ġif Ġconnected Ġto Ġthis Ġtrans ceiver ĊĠĠ Ġ* Ġ@ param Ġaddr ĊĠĠ Ġ* Ġ@ param Ġmessage ĊĠĠ Ġ*/ ĊĠ Ġfun Ġtransmit ( addr : ĠSocket Address , Ġmessage : ĠKon em Message ) Ġ{ ĊĠĠĠ Ġtransmit ( addr , Ġserializer . toJson ( message )) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠBroadcast Ġa Ġmessage Ġon Ġall Ġchannels Ġconnected Ġto Ġthis Ġport 's Ġtrans ceiver . ĊĠĠ Ġ* Ġ@ param Ġmessage ĊĠĠ Ġ*/ ĊĠ Ġfun Ġbroadcast Message ( message : ĠKon em Message ) Ġ{ ĊĠĠĠ Ġlogger . debug (" message : Ġ{}", Ġmessage ) ĊĠĠĠ Ġval Ġjson Message Ġ= Ġserializer . toJson ( message ) ĊĠĠĠ Ġsynchronized ( active Lock ) Ġ{ ĊĠĠĠĠĠ Ġfor Ġ( handler Ġin Ġactive Handlers . values ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhandler . sendMessage ( json Message ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ