telegram_client/
rtd.rs

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    // thread::spawn(move || futures::executor::block_on(async {
56    //   let is_stop = stop_flag.lock().unwrap();
57    //   let event_api = api.event_api();
58    //   while !*is_stop {
59    //     if let Some(json) = api.receive(2.0) {
60    //       Handler::new(&event_api, lout.borrow()).handle(&json).await;
61    //     }
62    //   }
63    // }))
64  }
65}
66