/* čĊ Ġ* ĠSp onge ĠKnowledge ĠBase čĊ Ġ* ĠHeart beat čĊ Ġ*/ čĊč Ċ package Ġorg . open ks avi . sponge . kotlin . examples čĊč Ċ import Ġorg . open ks avi . sponge . event . Event č Ċ import Ġorg . open ks avi . sponge . event . Event Scheduler Entry č Ċ import Ġorg . open ks avi . sponge . kotlin . K Filter č Ċ import Ġorg . open ks avi . sponge . kotlin . KK nowledge Base č Ċ import Ġorg . open ks avi . sponge . kotlin . K Rule č Ċ import Ġorg . open ks avi . sponge . kotlin . K Trigger č Ċ import Ġorg . open ks avi . sponge . rule . Rule č Ċ import Ġjava . time . Duration č Ċ import Ġjava . util . concurrent . atomic . Atomic Boolean čĊč Ċ class ĠRules Heartbeat Ġ: ĠK Knowledge Base () Ġ{ čĊčĊĠĠĠ Ġoverride Ġfun Ġon Init () Ġ{ čĊĠĠĠĠĠĠĠ Ġ// ĠVariables Ġfor Ġassertions Ġonly čĊĠĠĠĠĠĠĠ Ġsp onge . set Variable (" sound The Alarm ", ĠAtomic Boolean ( false )) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġclass ĠHeart beat Filter Ġ: ĠK Filter () Ġ{ čĊĠĠĠĠĠĠĠ Ġvar Ġheartbeat Counter Ġ= Ġ 0 čĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Configure () Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Event (" heartbeat ") čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Accept ( event : ĠEvent ): ĠBoolean Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġheartbeat Counter ++ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( heartbeat Counter Ġ> Ġ 2 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsp onge . remove Event ( sponge . get Variable (" he ar beat Event Entry ")) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** ĠSounds Ġthe Ġalarm Ġwhen Ġheartbeat Ġevent Ġstops Ġoccur ring Ġat Ġmost Ġevery Ġ 2 Ġseconds . Ġ*/ čĊĠĠĠ Ġclass ĠHeart beat Rule Ġ: ĠK Rule () Ġ{ čĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Configure () Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Events (" heartbeat Ġh 1 ", Ġ" heartbeat Ġh 2 Ġ: none ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Conditions (" h 2 ", Ġ{ Ġrule : ĠRule , Ġevent : ĠEvent Ġ-> Ġrule . first Event . get < Any ?> (" source ") Ġ== Ġevent . get < Any ?> (" source ") Ġ}) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Duration ( Duration . of Seconds ( 2 )) čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Run ( event : ĠEvent ?) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġsp onge . event (" alarm "). set (" severity ", Ġ 1 ). send () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġclass ĠAlarm Trigger Ġ: ĠK Trigger () Ġ{ čĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Configure () Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Event (" alarm ") čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Run ( event : ĠEvent ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Sound Ġthe Ġalarm !") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġsp onge . get Variable < Atomic Boolean >(" sound The Alarm "). set ( true ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon Startup () Ġ{ čĊĠĠĠĠĠĠĠ Ġsp onge . set Variable (" he ar beat Event Entry ", Ġ Ġsp onge . event (" heartbeat "). set (" source ", Ġ" Host 1 "). send After ( 1 0 0 , Ġ 1 0 0 0 )) čĊĠĠĠ Ġ} č Ċ } čĊ