Merge pull request #16 from jo-so/master
Update ruma client to new Tokio engine, make it thread safe
This commit is contained in:
		
						commit
						c50f043c51
					
				| @ -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"] | ||||
|  | ||||
| @ -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); () })); | ||||
| } | ||||
|  | ||||
							
								
								
									
										26
									
								
								src/lib.rs
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								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<C: Connect>(Rc<ClientData<C>>); | ||||
| pub struct Client<C: Connect>(Arc<ClientData<C>>); | ||||
| 
 | ||||
| /// Data contained in Client's Rc
 | ||||
| #[derive(Debug)] | ||||
| @ -40,16 +40,16 @@ where | ||||
| { | ||||
|     homeserver_url: Url, | ||||
|     hyper: HyperClient<C>, | ||||
|     session: RefCell<Option<Session>>, | ||||
|     session: Mutex<Option<Session>>, | ||||
| } | ||||
| 
 | ||||
| impl Client<HttpConnector> { | ||||
|     /// Creates a new client for making HTTP requests to the given homeserver.
 | ||||
|     pub fn new(homeserver_url: Url, session: Option<Session>) -> 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<HttpsConnector<HttpConnector>> { | ||||
|     pub fn https(homeserver_url: Url, session: Option<Session>) -> Result<Self, NativeTlsError> { | ||||
|         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<Session>, | ||||
|     ) -> 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 { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user