package Ġio . jav al in . server sent event Ċ Ċ import Ġjava . io . IOException Ċ import Ġjavax . servlet . Async Context Ċ import Ġjavax . servlet . Servlet OutputStream Ċ Ċ class ĠEmit ter ( private Ġvar Ġasync Context : ĠAsync Context ) Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġoutput : ĠServlet OutputStream ĊĠĠĠ Ġprivate Ġvar Ġclose Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġnewline Ġ= Ġ"\ n " ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . output Ġ= Ġasync Context . response . output Stream ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġemit ( event : ĠString , Ġdata : ĠString , Ġid : ĠString ? Ġ= Ġnull ) Ġ= Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" id : Ġ$ id $ newline ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" event : Ġ$ event $ newline ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . lines (). forEach Ġ{ Ġline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" data : Ġ$ line $ newline ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("$ newline $ newline ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . print ( sb . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġasync Context . response . flush Buffer () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Close () Ġ= Ġclose Ċ Ċ } Ċ