From c34d53ab56926c21c703683584cab5653f17ebe0 Mon Sep 17 00:00:00 2001 From: syn Date: Fri, 8 Jan 2021 01:46:05 +0300 Subject: move receiver from separate function receiver code is small enough to fit into `Client::new` --- src/client/mod.rs | 22 +++++++++------------- 1 file 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> { self.send(req) } - - /// Receiving side of client - fn tdlib_receive_loop(tx: Sender, tdlib: Arc, timeout: f64) { - loop { - if let Some(msg) = tdlib.receive(timeout) { - tx.send(JoinStreams::NewResponse(msg)).unwrap(); - } else { - debug!("receive timed out"); - } - } - } } -- cgit v1.2.1-18-gbd029