diff options
-rw-r--r-- | src/client/mod.rs | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/src/client/mod.rs b/src/client/mod.rs index d2589fa..39c6b50 100644 --- a/src/client/mod.rs +++ b/src/client/mod.rs @@ -17,7 +17,7 @@ mod responder; use crate::raw_ptr::TdPtr; use crate::update::Handler; use crossbeam::channel::{self, Sender}; -use log::debug; +use log::{debug, error}; use serde::{de::DeserializeOwned, ser::Serialize}; use serde_json::Value as JsonValue; use std::{ @@ -122,7 +122,14 @@ impl Client { let _tg_handle = { let api = api.clone(); let tx = tx.clone(); - thread::spawn(move || Self::tdlib_receive_loop(tx, api, timeout)); + thread::spawn(move || loop { + if let Some(msg) = api.receive(timeout) { + if tx.send(JoinStreams::NewResponse(msg)).is_err() { + error!("channel is closed. stopping receiver"); + break; + } + } + }); }; Self { sender: tx } } @@ -151,15 +158,4 @@ impl Client { ) -> crate::error::Result<ResponseFuture<JsonValue>> { self.send(req) } - - /// Receiving side of client - fn tdlib_receive_loop(tx: Sender<JoinStreams>, tdlib: Arc<TdPtr>, timeout: f64) { - loop { - if let Some(msg) = tdlib.receive(timeout) { - tx.send(JoinStreams::NewResponse(msg)).unwrap(); - } else { - debug!("receive timed out"); - } - } - } } |