summaryrefslogtreecommitdiffstats
path: root/src/client/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/mod.rs')
-rw-r--r--src/client/mod.rs22
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");
- }
- }
- }
}