package Ġk oo by Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġio . joo by . BadRequest Exception Ċ import Ġio . joo by . Context Ċ import Ġio . joo by . Execution Mode . EVENT _ LOOP Ċ import Ġio . joo by . MediaType . JSON Ċ import Ġio . joo by . hikari . Hikari Module Ċ import Ġio . joo by . json . Jack son Module Ċ import Ġio . joo by . require Ċ import Ġio . joo by . ro cker . R ocker Module Ċ import Ġio . joo by . run App Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Thread Local Random Ċ import Ġjavax . sql . DataSource Ċ Ċ private Ġconst Ġval ĠSELECT _ WORLD Ġ= Ġ" select Ġ* Ġfrom Ġworld Ġwhere Ġid = ?" Ċ Ċ private Ġconst Ġval ĠDB _ ROWS Ġ= Ġ 1 0 0 0 0 Ċ Ċ private Ġconst Ġval ĠMESSAGE Ġ= Ġ" Hello , ĠWorld !" Ċ Ċ private Ġval ĠMESSAGE _ BYTES Ġ= ĠMESSAGE . toByteArray ( Charsets . UTF _ 8 ) ĊĊ Ċ data Ġclass ĠMessage ( val Ġmessage : ĠString Ġ= ĠMESSAGE ) Ċ Ċ class ĠWorld ( val Ġid : ĠInt , Ġvar Ġrandom Number : ĠInt ) Ċ Ċ data Ġclass ĠFort une ( val Ġid : ĠInt , Ġvar Ġmessage : ĠString ) Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠ Ġrun App ( args , ĠEVENT _ LOOP ) Ġ{ ĊĊĠĠĠ Ġ/** ĠJSON : Ġ*/ ĊĠĠĠ Ġinstall ( Jack son Module ()) ĊĠĠĠ Ġval Ġmapper Ġ= Ġrequire ( ObjectMapper :: class ) ĊĊĠĠĠ Ġ/** ĠDatabase : Ġ*/ ĊĠĠĠ Ġinstall ( Hikari Module ()) ĊĠĠĠ Ġval Ġds Ġ= Ġrequire ( DataSource :: class ) ĊĊĠĠĠ Ġ/** ĠTemplate Ġengine : Ġ*/ ĊĠĠĠ Ġinstall ( R ocker Module ()) ĊĊĠĠĠ Ġget ("/ plaintext ") Ġ{ ĊĠĠĠĠĠ Ġctx . send ( MESSAGE _ BYTES ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġget ("/ json ") Ġ{ ĊĠĠĠĠĠ Ġctx . set ResponseType ( JSON ) ĊĠĠĠĠĠ Ġctx . send ( mapper . writeValue As Bytes ( Message ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠGo Ġblocking Ġ: Ġ*/ ĊĠĠĠ Ġdispatch Ġ{ ĊĊĠĠĠĠĠ Ġ/** ĠSingle Ġquery : Ġ*/ ĊĠĠĠĠĠ Ġget ("/ db ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrnd Ġ= ĠThread Local Random . current () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġds . connection . use Ġ{ Ġconn Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġconn . prepareStatement ( SELECT _ WORLD ). use Ġ{ Ġstatement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . setInt ( 1 , Ġnext Random ( rnd )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . executeQuery (). use Ġ{ Ġrs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrs . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWorld ( rs . getInt ( 1 ), Ġrs . getInt ( 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġctx . set ResponseType ( JSON ) ĊĠĠĠĠĠĠĠ Ġctx . send ( mapper . writeValue As Bytes ( result )) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġ/** ĠMultiple Ġquery : Ġ*/ ĊĠĠĠĠĠ Ġget ("/ queries ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrnd Ġ= ĠThread Local Random . current () ĊĠĠĠĠĠĠĠ Ġval Ġqueries Ġ= Ġctx . queries () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArrayList < World >( queries ) ĊĠĠĠĠĠĠĠ Ġds . connection . use Ġ{ Ġconn Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġconn . prepareStatement ( SELECT _ WORLD ). use Ġ{ Ġstatement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. queries ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . setInt ( 1 , Ġnext Random ( rnd )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . executeQuery (). use Ġ{ Ġrs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( rs . next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= ĠWorld ( rs . getInt ( 1 ), Ġrs . getInt ( 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġctx . set ResponseType ( JSON ) ĊĠĠĠĠĠĠĠ Ġctx . send ( mapper . writeValue As Bytes ( result )) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġ/** ĠUpdates : Ġ*/ ĊĠĠĠĠĠ Ġget ("/ updates ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġqueries Ġ= Ġctx . queries () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArrayList < World >( queries ) ĊĠĠĠĠĠĠĠ Ġval Ġrnd Ġ= ĠThread Local Random . current () ĊĊĠĠĠĠĠĠĠ Ġval Ġupdate Sql Ġ= ĠString Join er ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ", Ġ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" UPDATE Ġworld ĠSET Ġrandom Number Ġ= Ġtemp . random Number ĠFROM Ġ( VALUES Ġ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠORDER ĠBY Ġ 1 ) ĠAS Ġtemp ( id , Ġrandom Number ) ĠWHERE Ġtemp . id Ġ= Ġworld . id ") ĊĊĠĠĠĠĠĠĠ Ġds . connection . use Ġ{ Ġconnection Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġconnection . prepareStatement ( SELECT _ WORLD ). use Ġ{ Ġstatement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. queries ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . setInt ( 1 , Ġnext Random ( rnd )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . executeQuery (). use Ġ{ Ġrs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrs . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= ĠWorld ( rs . getInt (" id "), Ġrs . getInt (" random Number ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġprepare Ġupdate Ġquery ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Sql . add ("( ?, Ġ? )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġconnection . prepareStatement ( update Sql . toString ()). use Ġ{ Ġstatement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( world Ġin Ġresult ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġworld . random Number Ġ= Ġnext Random ( rnd ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . setInt ( ++ i , Ġworld . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . setInt ( ++ i , Ġworld . random Number ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . executeUpdate () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġctx . set ResponseType ( JSON ) ĊĠĠĠĠĠĠĠ Ġctx . send ( mapper . writeValue As Bytes ( result )) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġ/** ĠFort unes : Ġ*/ ĊĠĠĠĠĠ Ġget ("/ fortun es ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfort unes Ġ= ĠArrayList < Fort une >() ĊĠĠĠĠĠĠĠ Ġds . connection . use Ġ{ Ġconnection Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġconnection . prepareStatement (" select Ġ* Ġfrom Ġfort une "). use Ġ{ Ġst t Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġst t . executeQuery (). use Ġ{ Ġrs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( rs . next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfort unes Ġ+= ĠFort une ( rs . getInt (" id "), Ġrs . getString (" message ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfort unes . add ( Fort une ( 0 , Ġ" Additional Ġfort une Ġadded Ġat Ġrequest Ġtime .")) ĊĠĠĠĠĠĠĠ Ġfort unes . sortBy Ġ{ Ġit . message Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** Ġrender Ġview : Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġviews . fortun es . template ( fortun es ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġnext Random ( rnd : ĠRandom ): ĠInt Ġ{ ĊĠ Ġreturn Ġrnd . nextInt ( DB _ ROWS ) Ġ+ Ġ 1 Ċ } Ċ Ċ fun ĠContext . queries () Ġ= Ġtry Ġ{ ĊĠ Ġthis . query (" queries "). intValue ( 1 ). coerce In ( 1 , Ġ 5 0 0 ) Ċ } Ġcatch Ġ( x : ĠBadRequest Exception ) Ġ{ ĊĠĠ 1 Ċ } Ċ