diff --git a/Cargo.toml b/Cargo.toml index df4b21fc..4ae23b40 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,7 +32,7 @@ version = "0.2.2" [dev-dependencies] ruma-events = "0.11.0" -tokio-core = "0.1.17" +tokio = "0.1" [features] default = ["tls"] diff --git a/examples/hello_world.rs b/examples/hello_world.rs index ad8caafd..da322634 100644 --- a/examples/hello_world.rs +++ b/examples/hello_world.rs @@ -9,7 +9,6 @@ use ruma_events::{ EventType, }; use ruma_identifiers::RoomAliasId; -use tokio_core::reactor::Core; use url::Url; // from https://stackoverflow.com/a/43992218/1592377 @@ -66,8 +65,6 @@ fn main() { } }; - Core::new() - .unwrap() - .run(hello_world(homeserver_url.parse().unwrap(), room)) - .unwrap(); + tokio::run(hello_world(homeserver_url.parse().unwrap(), room) + .map_err(|e| { dbg!(e); () })); } diff --git a/src/lib.rs b/src/lib.rs index 41b2eb16..5be158c2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,7 +4,7 @@ #![deny(missing_docs)] #![feature(try_from)] -use std::{cell::RefCell, convert::TryInto, rc::Rc, str::FromStr}; +use std::{convert::TryInto, str::FromStr, sync::{Arc, Mutex}}; use futures::{ future::{Future, FutureFrom, IntoFuture}, @@ -30,7 +30,7 @@ mod session; /// A client for the Matrix client-server API. #[derive(Debug)] -pub struct Client(Rc>); +pub struct Client(Arc>); /// Data contained in Client's Rc #[derive(Debug)] @@ -40,16 +40,16 @@ where { homeserver_url: Url, hyper: HyperClient, - session: RefCell>, + session: Mutex>, } impl Client { /// Creates a new client for making HTTP requests to the given homeserver. pub fn new(homeserver_url: Url, session: Option) -> Self { - Client(Rc::new(ClientData { + Client(Arc::new(ClientData { homeserver_url, hyper: HyperClient::builder().keep_alive(true).build_http(), - session: RefCell::new(session), + session: Mutex::new(session), })) } } @@ -60,10 +60,10 @@ impl Client> { pub fn https(homeserver_url: Url, session: Option) -> Result { let connector = HttpsConnector::new(4)?; - Ok(Client(Rc::new(ClientData { + Ok(Client(Arc::new(ClientData { homeserver_url, hyper: { HyperClient::builder().keep_alive(true).build(connector) }, - session: RefCell::new(session), + session: Mutex::new(session), }))) } } @@ -80,10 +80,10 @@ where homeserver_url: Url, session: Option, ) -> Self { - Client(Rc::new(ClientData { + Client(Arc::new(ClientData { homeserver_url, hyper: hyper_client, - session: RefCell::new(session), + session: Mutex::new(session), })) } @@ -115,7 +115,7 @@ where ) .map(move |response| { let session = Session::new(response.access_token, response.user_id, response.device_id); - *data.session.borrow_mut() = Some(session.clone()); + *data.session.lock().unwrap() = Some(session.clone()); session }) @@ -143,7 +143,7 @@ where ) .map(move |response| { let session = Session::new(response.access_token, response.user_id, response.device_id); - *data.session.borrow_mut() = Some(session.clone()); + *data.session.lock().unwrap() = Some(session.clone()); session }) @@ -180,7 +180,7 @@ where ) .map(move |response| { let session = Session::new(response.access_token, response.user_id, response.device_id); - *data.session.borrow_mut() = Some(session.clone()); + *data.session.lock().unwrap() = Some(session.clone()); session }) @@ -250,7 +250,7 @@ where url.set_query(uri.query()); if E::METADATA.requires_authentication { - if let Some(ref session) = *data1.session.borrow() { + if let Some(ref session) = *data1.session.lock().unwrap() { url.query_pairs_mut() .append_pair("access_token", session.access_token()); } else {