package Ġru . ail abs . kont inu ous . server Ċ Ċ import Ġorg . jboss . netty . channel . Simple Channel Upstream Handler Ċ import Ġorg . jboss . netty . channel . Channel HandlerContext Ċ import Ġorg . jboss . netty . channel . Message Event Ċ import Ġorg . jboss . netty . handler . codec . http . HttpRequest Ċ import Ġru . ail abs . kont inu ous . logger . LoggerFactory Ċ import Ġorg . jboss . netty . handler . codec . http . QueryString Decoder Ċ Ċ import Ġorg . jboss . netty . handler . codec . http . HttpHeaders . is KeepAlive Ċ import Ġorg . jboss . netty . handler . codec . http . HttpResponse Ċ import Ġorg . jboss . netty . handler . codec . http . HttpHeaders . Values . KEEP _ AL IVE Ċ import Ġorg . jboss . netty . handler . codec . http . Http Version . HTTP _ 1 _ 1 Ċ import Ġorg . jboss . netty . handler . codec . http . HttpResponse Status . OK Ċ import Ġorg . jboss . netty . handler . codec . http . HttpHeaders . Names . CONTENT _ TYPE Ċ import Ġorg . jboss . netty . handler . codec . http . HttpHeaders . Names . CONNECTION Ċ import Ġorg . jboss . netty . handler . codec . http . HttpHeaders . Names . CONTENT _ LENGTH Ċ import Ġorg . jboss . netty . handler . codec . http . HttpHeaders . Names . COOKIE Ċ import Ġorg . jboss . netty . handler . codec . http . HttpHeaders . Names . SET _ COOKIE Ċ import Ġorg . jboss . netty . handler . codec . http . Default HttpResponse Ċ import Ġorg . jboss . netty . buffer . Channel Buffers Ċ import Ġorg . jboss . netty . util . Charset Util Ċ import Ġorg . jboss . netty . handler . codec . http . Cookie Decoder Ċ import Ġorg . jboss . netty . handler . codec . http . Cookie Ċ import Ġorg . jboss . netty . handler . codec . http . Cookie Encoder Ċ import Ġorg . jboss . netty . channel . Channel Future Ċ import Ġorg . jboss . netty . channel . Channel Future Listener Ċ import Ġru . ail abs . kont inu ous . controller . Controller Dispatcher Ċ import Ġru . ail abs . kont inu ous . controller . Request Header Ċ import Ġru . ail abs . kont inu ous . controller . Context Ċ import Ġru . ail abs . kont inu ous . controller . Simple Result Ċ import Ġorg . jboss . netty . handler . codec . http . HttpResponse Status Ċ import Ġorg . jboss . netty . handler . codec . http . Http Version Ċ import Ġorg . jboss . netty . handler . codec . http . HttpHeaders Ċ import Ġru . ail abs . kont inu ous . pers istance . Hibernate Session Ċ import Ġru . ail abs . kont inu ous . controller . Action 5 0 0 Ċ import Ġjava . nio . ByteBuffer Ċ import Ġru . ail abs . kont inu ous . controller . Mime Types Ċ import Ġorg . jboss . netty . channel . Exception Event Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . Print Stream Ċ import Ġru . ail abs . kont inu ous . controller . Http Header Names Ċ import Ġorg . jboss . netty . channel . Channel Future Listener Ċ import Ġorg . jboss . netty . channel . Channel Future Progress Listener Ċ import Ġorg . jboss . netty . channel . Default File Region Ċ import Ġru . ail abs . kont inu ous . initializer . Application Ċ import Ġru . ail abs . kont inu ous . controller . Cookie Ċ import Ġru . ail abs . kont inu ous . controller . Kont inu ous Session Ċ Ċ /** Ċ Ġ* ĠAli en ĠInv aders ĠLtd . Ċ Ġ* ĠUser : ĠAle ks and r ĠK ham uto v Ċ Ġ* ĠDate : Ġ 0 1 . 0 2 . 1 3 Ċ Ġ* ĠTime : Ġ 2 2 : 4 9 Ċ Ġ*/ Ċ class ĠKont inu ous Http Handler Ġ: ĠSimple Channel Upstream Handler () Ġ{ ĊĊĠĠĠ Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger (" ru . ail abs . kont inu ous . server . Kont inu ous Http Handler ") ĊĊĠĠĠ Ġval Ġdispatcher Ġ= ĠApplication . instance !!. dispatcher ĊĊĠĠĠ Ġval ĠK ONT IN UO US _ SESSION _ COOKIE Ġ= Ġ"_ kont inu ous _ session " ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġmessage Received ( ctx : ĠChannel HandlerContext ?, Ġe : ĠMessage Event ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnet ty HttpRequest Ġ= Ġe ?. getMessage () ĊĠĠĠĠĠĠĠ Ġwhen ( netty HttpRequest ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHttpRequest Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" Http Ġrequest Ġreceived Ġby Ġnet ty : Ġ${ netty HttpRequest }"); ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkeep Alive Ġ= Ġis KeepAlive ( netty HttpRequest ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Protocol Version Ġ= Ġnet ty HttpRequest . get Protocol Version () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Uri Ġ= ĠQuery String Decoder ( netty HttpRequest . get Uri ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Params Ġ= Ġrequest Uri . getParameters () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġrequest Uri . getPath () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheaders Ġ= Ġnet ty HttpRequest . getHeaders () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcookies Ġ= Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcookie Decoder Ġ= ĠCookie Decoder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcookie Headers Ġ= Ġnet ty HttpRequest . getHeaders ( Http Header Names . COOKIE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcookies Ġ= Ġcookie Headers !!. fold ( hash Map Of < String , ĠCookie >()) Ġ{ Ġmap , Ġcookie Header Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCookie Decoder (). decode ( cookie Header ) !!. fold ( map ) Ġ{ Ġmap , Ġc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap . put ( c . getName () !! , ĠCookie ( c . getName () !! , Ġc . getValue () !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcookies ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkont inu ous Request Ġ= ĠRequest Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeep Alive Ġ= Ġkeep Alive , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Protocol Version Ġ= Ġrequest Protocol Version !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuri Ġ= Ġnet ty HttpRequest . get Uri () !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ= Ġpath !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= Ġnet ty HttpRequest . getMethod () !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters Ġ= Ġrequest Params Ġas ĠMap < String , ĠList < String >>, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheaders Ġ= Ġheaders Ġas ĠList < Map < String , ĠString >>, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcookies Ġ= Ġcookies () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Handler Ġ= Ġdispatcher . find Action Handler ( kont inu ous Request ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Buffer Ġ= Ġnet ty HttpRequest . getContent () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= ĠByteArray ( c Buffer . readable Bytes ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc Buffer . read Bytes ( bytes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbytes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsession Cookie Ġ= Ġkont inu ous Request . cookies . get ( K ONT IN UO US _ SESSION _ COOKIE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Session Ġ= Ġ ĠKont inu ous Session () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( session Cookie Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Session . deserialize ( session Cookie . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġaction Result : ĠSimple Result Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHibernate Session . wrap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠContext ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Handler . named Params , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Session , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkont inu ous Request ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Handler . action . handler ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( action Result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSimple Result Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( user Session . is Dirty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Result . with Cookies ( Cookie ( K ONT IN UO US _ SESSION _ COOKIE , Ġuser Session . serialize ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Response ( e !! , Ġnet ty HttpRequest , Ġaction Result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġlogger . warn (" unknown Ġaction Ġresult Ġ${ action Result }"); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Cookies () Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġexception Ca ught ( ctx : ĠChannel HandlerContext ?, Ġe : ĠException Event ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . error (" Something Ġbad Ġhas Ġoccurred : Ġ", Ġe ?. getC ause ()) ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠDefault HttpResponse ( HTTP _ 1 _ 1 , ĠHttpResponse Status . INTERNAL _ SERVER _ ERROR ); ĊĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġe ?. getC ause ()?. getMessage ()?. toByteArray () ĊĠĠĠĠĠĠĠ Ġif ( message Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . write ( message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġstream Ġ= ĠPrint Stream ( output , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġe ?. getC ause ()?. printStackTrace ( stream ) ĊĊĠĠĠĠĠĠĠ Ġresponse . setContent ( Channel Buffers . copied Buffer ( output . toString (), ĠCharset Util . UTF _ 8 )) ĊĠĠĠĠĠĠĠ Ġresponse . setHeader ( CONTENT _ TYPE , Ġ" text / html ; Ġcharset = UTF - 8 ") ĊĠĠĠĠĠĠĠ Ġresponse . setHeader ( CONTENT _ LENGTH , Ġresponse . getContent () !!. readable Bytes ()); ĊĊĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= Ġe ?. getChannel () !! ĊĠĠĠĠĠĠĠ Ġvar Ġfuture Ġ= Ġchannel . write ( response ) ĊĊĠĠĠĠĠĠĠ Ġfuture ?. addListener ( Channel Future Listener . CLOSE ); ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġwrite Response ( e : ĠMessage Event , Ġrequest : ĠHttpRequest , Ġaction Result : ĠSimple Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠDec ide Ġwhether Ġto Ġclose Ġthe Ġconnection Ġor Ġnot . ĊĠĠĠĠĠĠĠ Ġval Ġkeep Alive Ġ= Ġis KeepAlive ( request ); ĊĊĠĠĠĠĠĠĠ Ġ// ĠBuild Ġthe Ġresponse Ġobject . ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠDefault HttpResponse ( HTTP _ 1 _ 1 , ĠHttpResponse Status . valueOf ( action Result . header . status )); ĊĊĊĠĠĠĠĠĠĠ Ġ// ĠResponse Ġheader ĠConnection : ĠKeep - Alive Ġis Ġneeded Ġfor ĠHTTP Ġ 1 . 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( keep Alive Ġ&& Ġrequest . get Protocol Version () Ġ== ĠHttp Version . HTTP _ 1 _ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . setHeader ( CONNECTION , ĠK EE P _ AL IVE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ(( key , Ġvalue ) Ġin Ġaction Result . header . headers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . setHeader ( key , Ġvalue ); ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( keep Alive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( action Result . header . headers . containsKey ( Http Header Names . CONTENT _ LENGTH )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġaction Result . body ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( body ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠByteBuffer Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . setContent ( Channel Buffers . copied Buffer ( body )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . setHeader ( CONTENT _ TYPE , ĠMime Types . BINARY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . setContent ( Channel Buffers . copied Buffer ( body , ĠCharset Util . UTF _ 8 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . setHeader ( CONTENT _ TYPE , Ġ" text / html ; Ġcharset = UTF - 8 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . setContent ( Channel Buffers . copied Buffer ( action Result . body . toString (), ĠCharset Util . UTF _ 8 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . setHeader ( CONTENT _ TYPE , Ġ" text / html ; Ġcharset = UTF - 8 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġ' Content - Length ' Ġheader Ġonly Ġfor Ġa Ġkeep - alive Ġconnection . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . setHeader ( CONTENT _ LENGTH , Ġresponse . getContent () !!. readable Bytes ()); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠWrite Ġthe Ġresponse . ĊĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= Ġe . getChannel () !! ĊĠĠĠĠĠĠĠ Ġvar Ġfuture Ġ= Ġchannel . write ( response ) ĊĠĠĠĠĠĠĠ Ġif ( action Result . header . headers . containsKey ( Http Header Names . CONTENT _ LENGTH )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfuture Ġ= Ġchannel . write ( action Result . body ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġregion Ġ= Ġaction Result . body Ġas ĠDefault File Region ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfuture ?. addListener ( object Ġ: ĠChannel Future Progress Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġoperation Complete ( future : ĠChannel Future ? Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregion . release External Resources (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġoperation Prog ressed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfuture : ĠChannel Future ? Ġ, Ġamount : ĠLong Ġ, Ġcurrent : ĠLong Ġ, Ġtotal : ĠLong Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// val Ġfuture Ġ= Ġe . getChannel ()?. write ( response ); ĊĊĠĠĠĠĠĠĠ Ġ// ĠClose Ġthe Ġnon - keep - alive Ġconnection Ġafter Ġthe Ġwrite Ġoperation Ġis Ġdone . ĊĠĠĠĠĠĠĠ Ġif Ġ(! keep Alive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfuture ?. addListener ( Channel Future Listener . CLOSE ); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }