/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 Ġ- Ġ 2 0 1 9 ĠC ub x ity , Ġsuper bl a ube ere 2 7 Ġand ĠK od ing King 1 Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġdev . cub x ity . mc . protocol . dsl Ċ Ċ import Ġdev . cub x ity . mc . protocol . MC Client Ċ import Ġdev . cub x ity . mc . protocol . MC Server Ċ import Ġdev . cub x ity . mc . protocol . Protocol Session Ċ import Ġdev . cub x ity . mc . protocol . Protocol Session . Side . CLIENT Ċ import Ġdev . cub x ity . mc . protocol . Protocol Session . Side . SERVER Ċ import Ġio . netty . channel . socket . nio . Nio SocketChannel Ċ import Ġreactor . netty . Connection Ċ Ċ /** Ċ Ġ* ĠDSL ĠFunction Ġto Ġbuild Ġ[ Protocol Session ] Ċ Ġ* Ġ@ param Ġside Ġside Ġthat Ġ[ Protocol Session ] Ġwill Ġact Ġlike . ĠPossible Ġvalues Ġare Ġ[ CLIENT ] Ġand Ġ[ SERVER ] Ċ Ġ*/ Ċ fun Ġbuild Protocol ( ĊĠĠĠ Ġside : ĠProtocol Session . Side , ĊĠĠĠ Ġconnection : ĠConnection , ĊĠĠĠ Ġchannel : ĠN io SocketChannel , ĊĠĠĠ Ġblock : ĠProtocol Session . () Ġ-> ĠUnit Ġ= Ġ{} Ċ ): ĠProtocol Session Ġ= ĠProtocol Session ( side , Ġconnection , Ġchannel ). apply ( block ) Ċ Ċ /** Ċ Ġ* ĠDSL ĠFunction Ġto Ġbuild Ġ[ Protocol Session ] Ġwith Ġdefault Ġconfigurations Ċ Ġ*/ Ċ fun Ġdefault Protocol ( side : ĠProtocol Session . Side , Ġconnection : ĠConnection , Ġchannel : ĠN io SocketChannel ) Ġ= ĊĠĠĠ ĠProtocol Session ( side , Ġconnection , Ġchannel ). apply Ġ{ Ġapply Defaults () Ġ} Ċ Ċ /** Ċ Ġ* ĠDSL ĠFunction Ġto Ġbuild Ġ[ MC Client ] Ċ Ġ*/ Ċ fun Ġclient ( ĊĠĠĠ Ġhost : ĠString , ĊĠĠĠ Ġport : ĠInt Ġ= Ġ 2 5 5 6 5 , ĊĠĠĠ Ġsession Factory : Ġ( Connection , ĠN io SocketChannel ) Ġ-> ĠProtocol Session Ġ= Ġ{ Ġcon , Ġch Ġ-> Ġdefault Protocol ( CLIENT , Ġcon , Ġch ) Ġ}, ĊĠĠĠ Ġblock : ĠMC Client . () Ġ-> ĠUnit Ġ= Ġ{} Ċ ) Ġ= ĠMC Client ( host , Ġport , Ġsession Factory ). apply ( block ) Ċ Ċ /** Ċ Ġ* ĠDSL ĠFunction Ġto Ġbuild Ġ[ MC Server ] Ċ Ġ*/ Ċ fun Ġserver ( ĊĠĠĠ Ġhost : ĠString Ġ= Ġ" 1 2 7 . 0 . 0 . 1 ", ĊĠĠĠ Ġport : ĠInt Ġ= Ġ 2 5 5 6 5 , ĊĠĠĠ Ġsession Factory : Ġ( Connection , ĠN io SocketChannel ) Ġ-> ĠProtocol Session Ġ= Ġ{ Ġcon , Ġch Ġ-> Ġdefault Protocol ( SERVER , Ġcon , Ġch ) Ġ}, ĊĠĠĠ Ġblock : ĠMC Server . () Ġ-> ĠUnit Ġ= Ġ{} Ċ ) Ġ= ĠMC Server ( host , Ġport , Ġsession Factory ). apply ( block )