package Ġcom . xb aim iao . minecraft . web . netty Ċ Ċ import Ġcom . xb aim iao . minecraft . web . netty . handler . impl . Get Handler Ċ import Ġcom . xb aim iao . minecraft . web . netty . handler . impl . Post Handler Ċ import Ġcom . xb aim iao . minecraft . web . netty . html . Html File Ċ import Ġio . netty . bootstrap . Server Bootstrap Ċ import Ġio . netty . channel . Channel Future Ċ import Ġio . netty . channel . Channel Initializer Ċ import Ġio . netty . channel . Channel Option .* Ċ import Ġio . netty . channel . EventLoop Group Ċ import Ġio . netty . channel . nio . Nio EventLoop Group Ċ import Ġio . netty . channel . socket . SocketChannel Ċ import Ġio . netty . channel . socket . nio . Nio Server SocketChannel Ċ import Ġio . netty . handler . codec . http . Http Object Aggregator Ċ import Ġio . netty . handler . codec . http . HttpRequest Decoder Ċ import Ġio . netty . handler . codec . http . HttpResponse Encoder Ċ Ċ class ĠNet ty HttpServer ( inet Port : ĠInt , Ġblock : ĠNet ty HttpServer . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġparent Group : ĠEvent Loop Group ĊĠĠĠ Ġprivate Ġval Ġchild Group : ĠEvent Loop Group ĊĠĠĠ Ġprivate Ġval Ġserver : ĠServer Bootstrap ĊĠĠĠ Ġprivate Ġval Ġfuture : ĠChannel Future ĊĠĠĠ Ġprivate Ġvar Ġhtml Prefix Ġ= Ġ"" ĊĠĠĠ Ġvar Ġstatic Ġ= Ġ"" ĊĠĠĠ Ġval Ġget Map Ġ= ĠHashMap < String , ĠGet Handler . () Ġ-> ĠUnit >() ĊĠĠĠ Ġval Ġpost Map Ġ= ĠHashMap < String , ĠPost Handler . () Ġ-> ĠUnit >() ĊĊĠĠĠ Ġfun Ġget ( path : ĠString , Ġblock : ĠGet Handler . () Ġ-> ĠUnit ) Ġ= Ġlet Ġ{ Ġget Map [ path ] Ġ= Ġblock Ġ} ĊĊĠĠĠ Ġfun Ġpost ( path : ĠString , Ġblock : ĠPost Handler . () Ġ-> ĠUnit ) Ġ= Ġlet Ġ{ Ġpost Map [ path ] Ġ= Ġblock Ġ} ĊĊĠĠĠ Ġfun Ġinstall Static ( path : ĠString ) Ġ= Ġlet Ġ{ Ġstatic Ġ= Ġpath Ġ} ĊĊĠĠĠ Ġfun Ġinstall Html ( path : ĠString ) Ġ= Ġlet Ġ{ Ġhtml Prefix Ġ= Ġpath Ġ} ĊĊĠĠĠ Ġfun Ġhtml ( filename : ĠString ): ĠHtml File Ġ= ĠHtml File ( html Prefix Ġ+ Ġfilename ) ĊĊĠĠĠ Ġfun Ġhandler ( block : ĠNet ty HttpServer . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġblock . invoke ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġparent Group Ġ= ĠN io EventLoop Group () ĊĠĠĠĠĠĠĠ Ġchild Group Ġ= ĠN io EventLoop Group () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver Ġ= ĠServer Bootstrap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 1 . Ġ ç»ĳå®ļ ä¸¤ä¸ª çº¿ç¨ĭ ç»Ħ åĪĨåĪ« çĶ¨æĿ¥ å¤ĦçĲĨ å®¢æĪ·ç«¯ éĢļ éģĵ çļĦ accept åĴĮ è¯» åĨĻ æĹ¶éĹ´ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver . group ( parent Group , Ġchild Group ) Ġ// Ġ 2 . Ġ ç»ĳå®ļ æľįåĬ¡ ç«¯ éĢļ éģĵ Nio Server SocketChannel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. channel ( Nio Server SocketChannel :: class . java ) Ġ// Ġ 3 . Ġ ç»Ļ è¯» åĨĻ äºĭä»¶ çļĦ çº¿ç¨ĭ éĢļ éģĵ ç»ĳå®ļ handler åİ» çľŁ æŃ£ å¤ĦçĲĨ è¯» åĨĻ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠChannel Initializer åĪĿå§ĭåĮĸ éĢļ éģĵ SocketChannel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. child Handler ( object Ġ: ĠChannel Initializer < SocketChannel ?> () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinit Channel ( p 0 : ĠSocket Channel ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 0 Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġè¯·æ±Ĥ è§£ çłģ åĻ¨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 0 . pipeline (). add Last (" http - decoder ", ĠHttpRequest Decoder ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå°Ĩ HTTP æ¶Īæģ¯ çļĦ å¤ļä¸ª éĥ¨åĪĨ åĲĪ æĪĲ ä¸ĢæĿ¡ å®Įæķ´ çļĦ HTTP æ¶Īæģ¯ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 0 . pipeline (). add Last (" http - ag gregator ", ĠHttp Object Aggregator ( 6 5 5 3 5 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĵįåºĶ è½¬ çłģ åĻ¨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 0 . pipeline (). add Last (" http - encoder ", ĠHttpResponse Encoder ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è§£åĨ³ å¤§ çłģ æµģ çļĦéĹ®é¢ĺ ï¼Į Chunk ed Write Handler ï¼ļ åĲĳ å®¢æĪ·ç«¯ åıĳéĢģ HTML 5 æĸĩä»¶ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 0 . pipeline (). add Last (" http - chunk ed ", ĠNet ty HttpServer Handler ( this @ Net ty HttpServer )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ èĩªå®ļä¹ī å¤ĦçĲĨ handler ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 0 . pipeline (). add Last (" http - server ", ĠNet ty HttpServer Handler ( this @ Net ty HttpServer )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 4 . Ġ çĽĳåĲ¬ ç«¯åı£ ï¼Ī æľįåĬ¡åĻ¨ host åĴĮ port ç«¯åı£ ï¼īï¼Į åĲĮæŃ¥ è¿ĶåĽŀ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠChannel Future Ġfuture Ġ= Ġserver . bind ( inet Host , Ġthis . inet Port ). sync (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver . option ( WRITE _ BUFFER _ HIGH _ WATER _ MARK , Ġ 1 0 4 8 5 7 6 Ġ* Ġ 2 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver . option ( SO _ KEEP AL IVE , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver . option ( TCP _ NODE LAY , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfuture Ġ= Ġserver . bind ( inet Port ). sync () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock . invoke ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå½ĵ éĢļ éģĵ åħ³éĹŃ æĹ¶ ç»§ç»Ń åĲĳ åĲİ æī§è¡Į ï¼Į è¿Ļ æĺ¯ä¸Ģä¸ª éĺ» å¡ŀ æĸ¹æ³ķ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfuture . channel (). close Future (). sync () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Group . shutdown Grace fully () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Group . shutdown Grace fully () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }