aboutsummaryrefslogtreecommitdiff
path: root/src/client/dispatch.rs
diff options
context:
space:
mode:
authorZeyla Hellyer <[email protected]>2017-09-30 21:19:29 -0700
committerZeyla Hellyer <[email protected]>2017-10-09 10:57:39 -0700
commitd7621aa4dfb2a3dea22e7848eb97e2b4cc1ade14 (patch)
tree842f96b915ffc6252ee3e191b68c0811eac35b9e /src/client/dispatch.rs
parentGenerate `Default` for CurrentUser and use it in `Cache::default` (diff)
downloadserenity-d7621aa4dfb2a3dea22e7848eb97e2b4cc1ade14.tar.xz
serenity-d7621aa4dfb2a3dea22e7848eb97e2b4cc1ade14.zip
Add a threadpool to the shard runner
A threadpool will help with giving event dispatches a threaded behaviour while still allowing the library the ability to perform other actions, such as receiving new events and heartbeating over the websocket client.
Diffstat (limited to 'src/client/dispatch.rs')
-rw-r--r--src/client/dispatch.rs35
1 files changed, 18 insertions, 17 deletions
diff --git a/src/client/dispatch.rs b/src/client/dispatch.rs
index 6c2cfc4..709e34b 100644
--- a/src/client/dispatch.rs
+++ b/src/client/dispatch.rs
@@ -37,16 +37,16 @@ macro_rules! now {
() => (Utc::now().time().second() * 1000)
}
-fn context(conn: &Arc<Mutex<Shard>>, data: &Arc<Mutex<ShareMap>>) -> Context {
- Context::new(conn.clone(), data.clone())
+fn context(conn: Arc<Mutex<Shard>>, data: Arc<Mutex<ShareMap>>) -> Context {
+ Context::new(conn, data)
}
#[cfg(feature = "framework")]
pub fn dispatch<H: EventHandler + 'static>(event: Event,
- conn: &Arc<Mutex<Shard>>,
- framework: &Arc<sync::Mutex<Option<Box<Framework + Send>>>>,
- data: &Arc<Mutex<ShareMap>>,
- event_handler: &Arc<H>) {
+ conn: Arc<Mutex<Shard>>,
+ framework: Arc<sync::Mutex<Option<Box<Framework + Send>>>>,
+ data: Arc<Mutex<ShareMap>>,
+ event_handler: Arc<H>) {
match event {
Event::MessageCreate(event) => {
let context = context(conn, data);
@@ -66,9 +66,9 @@ pub fn dispatch<H: EventHandler + 'static>(event: Event,
#[cfg(not(feature = "framework"))]
pub fn dispatch<H: EventHandler + 'static>(event: Event,
- conn: &Arc<Mutex<Shard>>,
- data: &Arc<Mutex<ShareMap>>,
- event_handler: &Arc<H>) {
+ conn: Arc<Mutex<Shard>>,
+ data: Arc<Mutex<ShareMap>>,
+ event_handler: Arc<H>) {
match event {
Event::MessageCreate(event) => {
let context = context(conn, data);
@@ -79,10 +79,11 @@ pub fn dispatch<H: EventHandler + 'static>(event: Event,
}
#[allow(unused_mut)]
-fn dispatch_message<H: EventHandler + 'static>(context: Context,
- mut message: Message,
- event_handler: &Arc<H>) {
-
+fn dispatch_message<H>(
+ context: Context,
+ mut message: Message,
+ event_handler: Arc<H>
+) where H: EventHandler + 'static {
#[cfg(feature = "model")]
{
message.transform_content();
@@ -93,9 +94,9 @@ fn dispatch_message<H: EventHandler + 'static>(context: Context,
#[allow(cyclomatic_complexity, unused_assignments, unused_mut)]
fn handle_event<H: EventHandler + 'static>(event: Event,
- conn: &Arc<Mutex<Shard>>,
- data: &Arc<Mutex<ShareMap>>,
- event_handler: &Arc<H>) {
+ conn: Arc<Mutex<Shard>>,
+ data: Arc<Mutex<ShareMap>>,
+ event_handler: Arc<H>) {
#[cfg(feature = "cache")]
let mut last_guild_create_time = now!();
@@ -205,7 +206,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event,
let cache = CACHE.read().unwrap();
if cache.unavailable_guilds.is_empty() {
- let context = context(conn, data);
+ let context = context(conn.clone(), data.clone());
let guild_amount = cache
.guilds