From 1d4ecb2f13258d286378c44d59c2ee4b1c68349d Mon Sep 17 00:00:00 2001 From: Zeyla Hellyer Date: Wed, 27 Sep 2017 10:15:58 -0700 Subject: Fix client no-framework compilation --- src/client/bridge/gateway/shard_manager.rs | 77 ++++++++++++++++++++---------- src/client/bridge/gateway/shard_queuer.rs | 4 +- src/client/bridge/gateway/shard_runner.rs | 29 +++++++++-- src/client/mod.rs | 1 + 4 files changed, 79 insertions(+), 32 deletions(-) (limited to 'src/client') 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>>, /// 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( + shard_index: u64, + shard_init: u64, + shard_total: u64, + ws_url: Arc>, + token: Arc>, + data: Arc>, + event_handler: Arc, + ) -> 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 { data: Arc>, @@ -24,6 +26,7 @@ pub struct ShardRunner { } impl ShardRunner { + #[cfg(feature = "framework")] pub fn new(shard: LockedShard, manager_tx: Sender, framework: Arc>>>, @@ -42,6 +45,23 @@ impl ShardRunner { } } + #[cfg(not(feature = "framework"))] + pub fn new(shard: LockedShard, + manager_tx: Sender, + data: Arc>, + event_handler: Arc) -> 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 ShardRunner { &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 Client { self.token.clone(), self.data.clone(), self.event_handler.clone(), + #[cfg(feature = "framework")] self.framework.clone(), ); -- cgit v1.2.3