package Ġcom . arian e . try akka . shutdown Ċ Ċ import Ġakka . Done Ċ import Ġakka . actor .* Ċ import Ġcom . types afe . config . Config Factory Ċ import Ġjava . util . concurrent . Comp letableFuture Ċ import Ġjava . util . concurrent . Completion Stage Ċ import Ġjava . util . function . Supplier Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġval Ġconfig Ġ= ĠConfig Factory . load (" shutdown System . conf ") ĊĠĠĠ Ġval Ġactor System Ġ= ĠActor System . create (" try shutdown ", Ġconfig ) ĊĊĠĠĠ Ġadd Coord inated Shutdown Tasks ( actor System ) ĊĊĠĠĠ Ġval Ġref Ġ= Ġactor System . actor Of ( Base Actor . props ()) ĊĠĠĠ Ġref . tell (" hello ", ĠActor Ref . no Sender ()) ĊĊĠĠĠ Ġ// Thread . sleep ( 5 0 0 0 ) Ċ } Ċ Ċ private Ġfun Ġadd Coord inated Shutdown Tasks ( actor System : ĠActor System ) Ġ{ ĊĠĠĠ Ġwith ( Coord inated Shutdown . get ( actor System )) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . add Task ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCoord inated Shutdown . Phase Actor System Terminate (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" system Terminated ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Supplier Ġ{ Ġprintln (" system Terminated ") Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġtask Supplier ( task : Ġ() Ġ-> ĠUnit ): ĠSupplier < Completion Stage < Done >> Ġ= ĊĠĠĠ ĠSupplier Ġ{ ĊĠĠĠĠĠĠĠ ĠCompletableFuture . supply Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDone . getInstance () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ class ĠBase Actor () Ġ: ĠAbstract Actor () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġprops (): ĠProps Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠProps . create ( Base Actor :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpost Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" post Stop ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Receive (): ĠReceive Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġreceive Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. match Any Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" receive Ġmsg Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . stop ( self ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ }