aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorZeyla Hellyer <[email protected]>2017-09-27 10:15:58 -0700
committerZeyla Hellyer <[email protected]>2017-09-27 10:15:58 -0700
commit1d4ecb2f13258d286378c44d59c2ee4b1c68349d (patch)
tree2114d5dd1f90752a4b22ef098e3d793c45b00a2d /src
parentUse `request_client!` for attachment downloading (#165) (diff)
downloadserenity-1d4ecb2f13258d286378c44d59c2ee4b1c68349d.tar.xz
serenity-1d4ecb2f13258d286378c44d59c2ee4b1c68349d.zip
Fix client no-framework compilation
Diffstat (limited to 'src')
-rw-r--r--src/client/bridge/gateway/shard_manager.rs77
-rw-r--r--src/client/bridge/gateway/shard_queuer.rs4
-rw-r--r--src/client/bridge/gateway/shard_runner.rs29
-rw-r--r--src/client/mod.rs1
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(),
);