@@ -75,21 +75,26 @@ async fn handle_client(
7575 Ok ( ( ) )
7676}
7777
78- async fn stream_events <
79- Tx : Sink < ToClientMessage , Error = HqError > + Unpin + ' static ,
80- Rx : Stream < Item = crate :: Result < FromClientMessage > > + Unpin ,
81- > (
78+ async fn stream_history_events < Tx : Sink < ToClientMessage , Error = HqError > + Unpin + ' static > (
8279 tx : & mut Tx ,
83- rx : & mut Rx ,
8480 mut history : mpsc:: UnboundedReceiver < Event > ,
85- mut current : mpsc:: UnboundedReceiver < Event > ,
8681) {
8782 log:: debug!( "Resending history started" ) ;
8883 while let Some ( e) = history. recv ( ) . await {
8984 if tx. send ( ToClientMessage :: Event ( e) ) . await . is_err ( ) {
9085 return ;
9186 }
9287 }
88+ }
89+
90+ async fn stream_events <
91+ Tx : Sink < ToClientMessage , Error = HqError > + Unpin + ' static ,
92+ Rx : Stream < Item = crate :: Result < FromClientMessage > > + Unpin ,
93+ > (
94+ tx : & mut Tx ,
95+ rx : & mut Rx ,
96+ mut current : mpsc:: UnboundedReceiver < Event > ,
97+ ) {
9398 log:: debug!( "History streaming completed" ) ;
9499 loop {
95100 let r = tokio:: select! {
@@ -164,18 +169,25 @@ pub async fn client_rpc_loop<
164169 FromClientMessage :: CloseJob ( msg) => {
165170 handle_job_close ( & state_ref, senders, & msg. selector ) . await
166171 }
167- FromClientMessage :: StreamEvents => {
172+ FromClientMessage :: StreamEvents ( msg ) => {
168173 log:: debug!( "Start streaming events to client" ) ;
169174 /* We create two event queues, one for historic events and one for live events
170175 So while historic events are loaded from the file and streamed, live events are already
171176 collected and sent immediately the historic events are sent */
172177 let ( tx1, rx1) = mpsc:: unbounded_channel :: < Event > ( ) ;
173- let ( tx2, rx2) = mpsc:: unbounded_channel :: < Event > ( ) ;
174- let listener_id = senders. events . register_listener ( tx1, tx2) ;
175-
176- stream_events ( & mut tx, & mut rx, rx1, rx2) . await ;
177-
178- senders. events . unregister_listener ( listener_id) ;
178+ let live = if !msg. history_only {
179+ let ( tx2, rx2) = mpsc:: unbounded_channel :: < Event > ( ) ;
180+ let listener_id = senders. events . register_listener ( tx2) ;
181+ Some ( ( rx2, listener_id) )
182+ } else {
183+ None
184+ } ;
185+ senders. events . replay_journal ( tx1) ;
186+ stream_history_events ( & mut tx, rx1) . await ;
187+ if let Some ( ( rx2, listener_id) ) = live {
188+ stream_events ( & mut tx, & mut rx, rx2) . await ;
189+ senders. events . unregister_listener ( listener_id) ;
190+ }
179191 break ;
180192 }
181193 FromClientMessage :: ServerInfo => {
0 commit comments