package Ġkotlin _ servers Ċ Ċ import Ġnet . open h ft . affinity . Affinity Lock Ċ import Ġnet . open h ft . chron icle . bytes . Bytes Ċ // import Ġjava . nio . ByteBuffer ĊĊĊ Ċ class ĠWorker ( val Ġwrite Buf : Bytes < Void >) Ġ Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġsome State Ġ= Ġ 0 L ĊĊĠĠĠ Ġfun Ġdo Work ( newValue Ġ: ĠLong Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwrite Buf . write Long ( 0 , newValue ) ĊĠĠĠĠĠĠĠ Ġsome State Ġ= ĠnewValue ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠEvent Loop ( val Ġread Buf : Bytes < Void >) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġcallback Ġ: Ġ(( Long )-> Unit )? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġlast Value Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Value Ġ= Ġspin Until Change ( read Buf , Ġlast Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ?. invoke ( last Value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Callback ( cb : Ġ( Long )-> Unit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcallback Ġ= Ġcb ĊĠĠĠ Ġ} Ċ Ċ } ĊĊĊ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĊĠĠĠ Ġval Ġcpu _ num Ġ= Ġargs . get ( 0 ). toInt () ĊĊĠĠĠ Ġval Ġ( cli Buf , Ġsrv Buf ) Ġ= Ġmap Memory () ĊĊĠĠĠ Ġval Ġev Ġ= ĠEvent Loop ( Ġcli Buf Ġ) ĊĊĠĠĠ Ġval Ġw k Ġ= ĠWorker ( Ġsrv Buf Ġ) ĊĊĠĠĠ Ġev . set Callback ( Ġw k :: do Work Ġ) ĊĊĠĠĠ ĠAff inity Lock . acquire Lock ( cpu _ num ). use Ġ{ ĊĠĠĠĠĠĠĠ Ġev . run () ĊĠĠĠ Ġ} Ċ Ċ }