diff options
| author | Zeyla Hellyer <[email protected]> | 2017-09-30 21:19:29 -0700 |
|---|---|---|
| committer | Zeyla Hellyer <[email protected]> | 2017-10-09 10:57:39 -0700 |
| commit | d7621aa4dfb2a3dea22e7848eb97e2b4cc1ade14 (patch) | |
| tree | 842f96b915ffc6252ee3e191b68c0811eac35b9e /src/client/dispatch.rs | |
| parent | Generate `Default` for CurrentUser and use it in `Cache::default` (diff) | |
| download | serenity-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.rs | 35 |
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 |