@@ -114,35 +114,6 @@ pub struct ListenerActor {
114114}
115115
116116impl ListenerActor {
117- pub fn new ( config : ListenerConfig ) -> ListenerHandle {
118- let ( event_tx, event_rx) = async_channel:: bounded ( 64 ) ;
119- let ( commands_tx, commands_rx) = mpsc:: channel ( 1 ) ;
120-
121- let config_clone = config. clone ( ) ;
122-
123- // use a new local set to isolate panics
124- let local_set = LocalSet :: new ( ) ;
125- local_set. spawn_local ( async move {
126- let this = Self {
127- event_tx,
128- commands_rx : Some ( commands_rx) ,
129- config : config_clone,
130- state : ConnectionState :: Unitialized ,
131- } ;
132-
133- this. run_loop ( ) . await ;
134- } ) ;
135- spawn_local ( local_set) ;
136-
137- ListenerHandle {
138- events : event_rx,
139- config,
140- commands : commands_tx,
141- listener_actor : Arc :: new ( RwLock :: new ( None ) ) ,
142- join_handle : Arc :: new ( None ) ,
143- }
144- }
145-
146117 pub async fn run_loop ( mut self ) {
147118 let mut commands_rx = self . commands_rx . take ( ) . unwrap ( ) ;
148119 loop {
@@ -280,6 +251,35 @@ pub struct ListenerHandle {
280251}
281252
282253impl ListenerHandle {
254+ pub fn new ( config : ListenerConfig ) -> ListenerHandle {
255+ let ( event_tx, event_rx) = async_channel:: bounded ( 64 ) ;
256+ let ( commands_tx, commands_rx) = mpsc:: channel ( 1 ) ;
257+
258+ let config_clone = config. clone ( ) ;
259+
260+ // use a new local set to isolate panics
261+ let local_set = LocalSet :: new ( ) ;
262+ local_set. spawn_local ( async move {
263+ let this = ListenerActor {
264+ event_tx,
265+ commands_rx : Some ( commands_rx) ,
266+ config : config_clone,
267+ state : ConnectionState :: Unitialized ,
268+ } ;
269+
270+ this. run_loop ( ) . await ;
271+ } ) ;
272+ spawn_local ( local_set) ;
273+
274+ Self {
275+ events : event_rx,
276+ config,
277+ commands : commands_tx,
278+ listener_actor : Arc :: new ( RwLock :: new ( None ) ) ,
279+ join_handle : Arc :: new ( None ) ,
280+ }
281+ }
282+
283283 // the response will be sent as an event in self.events
284284 pub async fn request_state ( & self ) -> ConnectionState {
285285 let ( tx, rx) = oneshot:: channel ( ) ;
@@ -337,7 +337,7 @@ mod tests {
337337 since : 0 ,
338338 } ;
339339
340- let mut listener = ListenerActor :: new ( config. clone ( ) ) ;
340+ let mut listener = ListenerHandle :: new ( config. clone ( ) ) ;
341341 let items: Vec < _ > = listener. events . take ( 3 ) . collect ( ) . await ;
342342
343343 dbg ! ( & items) ;
@@ -383,7 +383,7 @@ mod tests {
383383 since : 0 ,
384384 } ;
385385
386- let mut listener = ListenerActor :: new ( config. clone ( ) ) ;
386+ let mut listener = ListenerHandle :: new ( config. clone ( ) ) ;
387387 let items: Vec < _ > = listener. events . take ( 3 ) . collect ( ) . await ;
388388
389389 dbg ! ( & items) ;
@@ -414,7 +414,7 @@ mod tests {
414414 since : 0 ,
415415 } ;
416416
417- let mut listener = ListenerActor :: new ( config. clone ( ) ) ;
417+ let mut listener = ListenerHandle :: new ( config. clone ( ) ) ;
418418
419419 // assert_event_matches!(listener, ListenerEvent::Connected { .. },);
420420 } ) ;
0 commit comments