1use core::borrow::Borrow;
2use std::sync::{Arc, Mutex};
3use std::thread;
4use std::thread::JoinHandle;
5
6use crate::api::Api;
7use crate::handler::Handler;
8use crate::listener::Listener;
9
10pub struct TdRecv {}
11
12impl TdRecv {
13 pub fn new() -> TdRecv {
14 Self {}
15 }
16
17 pub fn start(
18 &self,
19 api: Arc<Api>,
20 stop_flag: Arc<Mutex<bool>>,
21 listener: &Listener,
22 warn_unregister_listener:
23 Arc<bool>,
24 ) -> JoinHandle<()> {
25 let event_listener = listener.event_listener();
26 let rasync_listener = listener.rasync_listener();
27 let event_lout = event_listener.lout();
28 let rasync_lout = rasync_listener.lout();
29
30 thread::spawn(move || {
31 let is_stop = stop_flag.lock().unwrap();
32
33 while !*is_stop {
34 if let Some(json) = api.receive(2.0) {
35 let api = api.clone();
36 let event_lout = event_lout.clone();
37 let rasync_lout = rasync_lout.clone();
38 let warn_unregister_listener = warn_unregister_listener.clone();
39 thread::spawn(move || {
40 futures::executor::block_on(async move {
41 Handler::new(
42 api.as_ref(),
43 &event_lout,
44 &rasync_lout,
45 warn_unregister_listener.borrow(),
46 )
47 .handle(&json)
48 .await;
49 });
50 });
51 }
52 }
53 })
54
55 }
65}
66