/* Ċ Ġ* ĠMIT ĠLicense Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 , ĠVal ap he e . Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . val ap he e . t esseract . net Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . val ap he e . t esseract . latest Protocol Version Ċ import Ġcom . val ap he e . t esseract . util . Registry Ċ import Ġio . netty . buffer . Byte Buf Ċ import Ġio . netty . channel . Channel HandlerContext Ċ import Ġio . netty . handler . codec . Message To Byte Encoder Ċ Ċ /** Ċ Ġ* Ġ@ author ĠKevin ĠL ud w ig Ċ Ġ*/ Ċ class ĠPacket Encoder ( ĊĠĠĠ Ġprivate Ġval Ġclient : ĠBoolean , ĊĠĠĠ Ġvar Ġversion : ĠInt Ġ= Ġlatest Protocol Version , Ċ ) Ġ: ĠMessage To Byte Encoder < Packet >() Ġ{ ĊĠĠĠ Ġvar ĠobjectMapper : ĠObjectMapper ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġblock States : ĠRegistry < String >? Ġ= Ġnull ĊĠĠĠ Ġvar Ġitems : ĠRegistry < String >? Ġ= Ġnull ĊĊĠĠĠ Ġ/* override Ġfun Ġaccept Outbound Message ( message : ĠAny ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrestrictions Ġ= Ġmessage :: class . find Annotation < Restrict >() ?. value Ġ?: Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġclient Ġ&& Ġrestrictions . contains ( Restriction . ToServer ) Ġ|| Ġ! client Ġ&& Ġrestrictions . contains ( Restriction . To Client ) ĊĠĠĠ Ġ}*/ ĊĊĠĠĠ Ġoverride Ġfun Ġencode ( context : ĠChannel HandlerContext , Ġmessage : ĠPacket , Ġout : ĠByte Buf ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpacket Buffer Ġ= ĠPacket Buffer ( out , Ġfalse , ĠobjectMapper , Ġblock States , Ġitems ) ĊĠĠĠĠĠĠĠ Ġpacket Buffer . write Var UInt ( message . id Ġand ĠPacket . id Mask Ġor Ġ(( message . sender Id Ġand ĠPacket . sender Id Mask ) Ġshl ĠPacket . sender Id Shift ) Ġor Ġ(( message . clientId Ġand ĠPacket . clientId Mask ) Ġshl ĠPacket . clientId Shift )) ĊĠĠĠĠĠĠĠ Ġmessage . write ( packet Buffer , Ġversion ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNAME Ġ= Ġ" ta - packet - encoder " ĊĠĠĠ Ġ} Ċ } Ċ