package Ġorg . kin . sdk . base . tools Ċ Ċ import Ġcom . here . ok sse . Server Sent Event Ċ import Ġorg . kin . stell ar fork . requests . EventListener Ċ import Ġorg . kin . stell ar fork . requests . Streaming Protocol Ċ import Ġjava . util . concurrent . Copy On Write ArrayList Ċ Ċ class ĠManaged Server Sent Event Stream < ResponseType >( private Ġval Ġrequest Builder : ĠStreaming Protocol < ResponseType >) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlock Ġ= ĠAny () ĊĠĠĠ Ġval Ġlisteners Ġ= ĠCopy On Write ArrayList < EventListener < ResponseType >>() ĊĠĠĠ Ġprivate Ġvar Ġconnection : ĠServer Sent Event ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġlast Received Response : ĠResponse Type ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġlistener Ġ= ĠResponse Type EventListener () ĊĊĠĠĠ Ġfun Ġadd Listener ( listener : ĠEvent Listener < ResponseType >): ĠManaged Server Sent Event Stream < ResponseType > Ġ{ ĊĠĠĠĠĠĠĠ Ġlisteners . add ( listener ) ĊĠĠĠĠĠĠĠ Ġlast Received Response ?. let Ġ{ Ġlistener . on Event ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġconnect If Ne cessary () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Listener ( listener : ĠEvent Listener < ResponseType >): ĠManaged Server Sent Event Stream < ResponseType > Ġ{ ĊĠĠĠĠĠĠĠ Ġlisteners . remove ( listener ) ĊĠĠĠĠĠĠĠ Ġclose If Ne cessary () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhas Connection (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġconnection Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠStarts Ġa Ġconnection Ġif Ġnot Ġalready ; ĊĠĠĠĠ Ġ* Ġ Ġcriteria Ġfor Ġconnection Ġis Ġat Ġleast Ġone Ġactive Ġlistener . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġconnect If Ne cessary () Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( connection Ġ== Ġnull Ġ&& Ġlisteners . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection Ġ= Ġrequest Builder . stream ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclose If Ne cessary () Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( listeners . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠResponse Type EventListener Ġ: ĠEvent Listener < ResponseType > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Event ( data : ĠResponse Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Received Response Ġ= Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners . indices ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġlisteners [ it ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġit . on Event ( data ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊĊ