diff options
| author | Zeyla Hellyer <[email protected]> | 2017-09-27 10:15:58 -0700 |
|---|---|---|
| committer | Zeyla Hellyer <[email protected]> | 2017-09-27 10:15:58 -0700 |
| commit | 1d4ecb2f13258d286378c44d59c2ee4b1c68349d (patch) | |
| tree | 2114d5dd1f90752a4b22ef098e3d793c45b00a2d /src | |
| parent | Use `request_client!` for attachment downloading (#165) (diff) | |
| download | serenity-1d4ecb2f13258d286378c44d59c2ee4b1c68349d.tar.xz serenity-1d4ecb2f13258d286378c44d59c2ee4b1c68349d.zip | |
Fix client no-framework compilation
Diffstat (limited to 'src')
| -rw-r--r-- | src/client/bridge/gateway/shard_manager.rs | 77 | ||||
| -rw-r--r-- | src/client/bridge/gateway/shard_queuer.rs | 4 | ||||
| -rw-r--r-- | src/client/bridge/gateway/shard_runner.rs | 29 | ||||
| -rw-r--r-- | src/client/mod.rs | 1 |
4 files changed, 79 insertions, 32 deletions
diff --git a/src/client/bridge/gateway/shard_manager.rs b/src/client/bridge/gateway/shard_manager.rs index 0ac9d19..e723398 100644 --- a/src/client/bridge/gateway/shard_manager.rs +++ b/src/client/bridge/gateway/shard_manager.rs @@ -18,7 +18,6 @@ use typemap::ShareMap; use framework::Framework; pub struct ShardManager { - #[cfg(feature = "framework")] runners: Arc<ParkingLotMutex<HashMap<ShardId, ShardRunnerInfo>>>, /// The index of the first shard to initialize, 0-indexed. shard_index: u64, @@ -47,31 +46,57 @@ impl ShardManager { let runners = Arc::new(ParkingLotMutex::new(HashMap::new())); - let mut shard_queuer = feature_framework! {{ - ShardQueuer { - data: data.clone(), - event_handler: event_handler.clone(), - framework: framework.clone(), - last_start: None, - manager_tx: thread_tx.clone(), - runners: runners.clone(), - rx: shard_queue_rx, - token: token.clone(), - ws_url: ws_url.clone(), - } - } else { - ShardQueuer { - data: data.clone(), - event_handler: event_handler.clone(), - last_start: None, - manager_tx: thread_tx.clone(), - runners: runners.clone(), - rx: shard_queue_rx, - rx: shard_queue_rx, - token: token.clone(), - ws_url: ws_url.clone(), - } - }}; + let mut shard_queuer = ShardQueuer { + data: data.clone(), + event_handler: event_handler.clone(), + framework: framework.clone(), + last_start: None, + manager_tx: thread_tx.clone(), + runners: runners.clone(), + rx: shard_queue_rx, + token: token.clone(), + ws_url: ws_url.clone(), + }; + + thread::spawn(move || { + shard_queuer.run(); + }); + + Self { + shard_queuer: shard_queue_tx, + thread_rx: thread_rx, + runners, + shard_index, + shard_init, + shard_total, + } + } + + #[cfg(not(feature = "framework"))] + pub fn new<H>( + shard_index: u64, + shard_init: u64, + shard_total: u64, + ws_url: Arc<Mutex<String>>, + token: Arc<Mutex<String>>, + data: Arc<ParkingLotMutex<ShareMap>>, + event_handler: Arc<H>, + ) -> Self where H: EventHandler + Send + Sync + 'static { + let (thread_tx, thread_rx) = mpsc::channel(); + let (shard_queue_tx, shard_queue_rx) = mpsc::channel(); + + let runners = Arc::new(ParkingLotMutex::new(HashMap::new())); + + let mut shard_queuer = ShardQueuer { + data: data.clone(), + event_handler: event_handler.clone(), + last_start: None, + manager_tx: thread_tx.clone(), + runners: runners.clone(), + rx: shard_queue_rx, + token: token.clone(), + ws_url: ws_url.clone(), + }; thread::spawn(move || { shard_queuer.run(); diff --git a/src/client/bridge/gateway/shard_queuer.rs b/src/client/bridge/gateway/shard_queuer.rs index 8d3dbe1..e313d55 100644 --- a/src/client/bridge/gateway/shard_queuer.rs +++ b/src/client/bridge/gateway/shard_queuer.rs @@ -1,4 +1,3 @@ -use framework::Framework; use gateway::Shard; use internal::prelude::*; use parking_lot::Mutex as ParkingLotMutex; @@ -17,6 +16,9 @@ use super::{ }; use typemap::ShareMap; +#[cfg(feature = "framework")] +use framework::Framework; + /// The shard queuer is a simple loop that runs indefinitely to manage the /// startup of shards. /// diff --git a/src/client/bridge/gateway/shard_runner.rs b/src/client/bridge/gateway/shard_runner.rs index 4595247..d99cf76 100644 --- a/src/client/bridge/gateway/shard_runner.rs +++ b/src/client/bridge/gateway/shard_runner.rs @@ -3,7 +3,7 @@ use internal::ws_impl::ReceiverExt; use model::event::{Event, GatewayEvent}; use parking_lot::Mutex as ParkingLotMutex; use std::sync::mpsc::{self, Receiver, Sender}; -use std::sync::{Arc, Mutex}; +use std::sync::Arc; use super::super::super::{EventHandler, dispatch}; use super::{LockedShard, ShardId, ShardManagerMessage}; use typemap::ShareMap; @@ -11,6 +11,8 @@ use websocket::WebSocketError; #[cfg(feature = "framework")] use framework::Framework; +#[cfg(feature = "framework")] +use std::sync::Mutex; pub struct ShardRunner<H: EventHandler + 'static> { data: Arc<ParkingLotMutex<ShareMap>>, @@ -24,6 +26,7 @@ pub struct ShardRunner<H: EventHandler + 'static> { } impl<H: EventHandler + 'static> ShardRunner<H> { + #[cfg(feature = "framework")] pub fn new(shard: LockedShard, manager_tx: Sender<ShardManagerMessage>, framework: Arc<Mutex<Option<Box<Framework + Send>>>>, @@ -42,6 +45,23 @@ impl<H: EventHandler + 'static> ShardRunner<H> { } } + #[cfg(not(feature = "framework"))] + pub fn new(shard: LockedShard, + manager_tx: Sender<ShardManagerMessage>, + data: Arc<ParkingLotMutex<ShareMap>>, + event_handler: Arc<H>) -> Self { + let (tx, rx) = mpsc::channel(); + + Self { + runner_rx: rx, + runner_tx: tx, + data, + event_handler, + manager_tx, + shard, + } + } + pub fn run(&mut self) -> Result<()> { loop { { @@ -86,10 +106,9 @@ impl<H: EventHandler + 'static> ShardRunner<H> { &self.event_handler); } else { dispatch(event, - &info.shard, - &info.data, - &info.event_handler, - &handle); + &self.shard, + &self.data, + &self.event_handler); }} } } diff --git a/src/client/mod.rs b/src/client/mod.rs index 6ab6951..839328a 100644 --- a/src/client/mod.rs +++ b/src/client/mod.rs @@ -758,6 +758,7 @@ impl<H: EventHandler + Send + Sync + 'static> Client<H> { self.token.clone(), self.data.clone(), self.event_handler.clone(), + #[cfg(feature = "framework")] self.framework.clone(), ); |