diff options
| author | acdenisSK <[email protected]> | 2017-09-11 16:03:13 +0200 |
|---|---|---|
| committer | acdenisSK <[email protected]> | 2017-09-11 16:03:29 +0200 |
| commit | 97e84fe136c5649ca3529c11790d9988dfe3bb92 (patch) | |
| tree | c37c0e988d6e2495cb3ff56333c1a140a3421e8a /src | |
| parent | Fixed admin bypass perm to framework allowed_roles (diff) | |
| download | serenity-97e84fe136c5649ca3529c11790d9988dfe3bb92.tar.xz serenity-97e84fe136c5649ca3529c11790d9988dfe3bb92.zip | |
Add `Context::handle`
Diffstat (limited to 'src')
| -rw-r--r-- | src/client/context.rs | 6 | ||||
| -rw-r--r-- | src/client/dispatch.rs | 86 |
2 files changed, 48 insertions, 44 deletions
diff --git a/src/client/context.rs b/src/client/context.rs index 1bd5ed7..3802134 100644 --- a/src/client/context.rs +++ b/src/client/context.rs @@ -3,6 +3,7 @@ use typemap::ShareMap; use gateway::Shard; use model::*; use parking_lot::Mutex; +use tokio_core::reactor::Handle; #[cfg(feature = "cache")] use super::CACHE; @@ -40,14 +41,17 @@ pub struct Context { /// Note that if you are sharding, in relevant terms, this is the shard /// which received the event being dispatched. pub shard: Arc<Mutex<Shard>>, + /// A tokio handle for spawning efficient tasks inside commands and events. + pub handle: Handle, } impl Context { /// Create a new Context to be passed to an event handler. - pub(crate) fn new(shard: Arc<Mutex<Shard>>, data: Arc<Mutex<ShareMap>>) -> Context { + pub(crate) fn new(shard: Arc<Mutex<Shard>>, data: Arc<Mutex<ShareMap>>, handle: Handle) -> Context { Context { data, shard, + handle, } } diff --git a/src/client/dispatch.rs b/src/client/dispatch.rs index 428c11e..f6d9dd3 100644 --- a/src/client/dispatch.rs +++ b/src/client/dispatch.rs @@ -42,8 +42,8 @@ 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>>, handle: &Handle) -> Context { + Context::new(conn.clone(), data.clone(), handle.clone()) } #[cfg(feature = "standard_framework")] @@ -65,7 +65,7 @@ pub fn dispatch<H: EventHandler + 'static>(event: Event, tokio_handle: &Handle) { match event { Event::MessageCreate(event) => { - let context = context(conn, data); + let context = context(conn, data, tokio_handle); dispatch_message( context.clone(), event.message.clone(), @@ -95,7 +95,7 @@ pub fn dispatch<H: EventHandler + 'static>(event: Event, tokio_handle: &Handle) { match event { Event::MessageCreate(event) => { - let context = context(conn, data); + let context = context(conn, data, tokio_handle); dispatch_message(context, event.message, event_handler, tokio_handle); }, other => handle_event(other, conn, data, event_handler, tokio_handle), @@ -144,7 +144,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, Event::ChannelCreate(event) => { update!(update_with_channel_create, event); - let context = context(conn, data); + let context = context(conn, data, tokio_handle); // This different channel_create dispacthing is only due to the fact that // each time the bot receives a dm, this event is also fired. @@ -175,7 +175,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, Event::ChannelDelete(event) => { update!(update_with_channel_delete, event); - let context = context(conn, data); + let context = context(conn, data, tokio_handle); match event.channel { Channel::Private(_) | @@ -197,7 +197,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, } }, Event::ChannelPinsUpdate(event) => { - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); tokio_handle.spawn_fn(move || { @@ -208,7 +208,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, Event::ChannelRecipientAdd(mut event) => { update!(update_with_channel_recipient_add, @event); - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); tokio_handle.spawn_fn(move || { @@ -223,7 +223,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, Event::ChannelRecipientRemove(event) => { update!(update_with_channel_recipient_remove, event); - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); tokio_handle.spawn_fn(move || { @@ -238,7 +238,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, Event::ChannelUpdate(event) => { update!(update_with_channel_update, event); - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); feature_cache! {{ @@ -255,7 +255,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, }} }, Event::GuildBanAdd(event) => { - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); tokio_handle.spawn_fn(move || { @@ -264,7 +264,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, }); }, Event::GuildBanRemove(event) => { - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); tokio_handle.spawn_fn(move || { @@ -291,7 +291,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, if cache.unavailable_guilds.is_empty() { let h = event_handler.clone(); - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let guild_amount = cache .guilds @@ -306,7 +306,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, } } - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); feature_cache! {{ @@ -323,7 +323,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, }, Event::GuildDelete(event) => { let _full = update!(update_with_guild_delete, event); - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); feature_cache! {{ @@ -341,7 +341,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, Event::GuildEmojisUpdate(event) => { update!(update_with_guild_emojis_update, event); - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); tokio_handle.spawn_fn(move || { @@ -354,7 +354,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, }); }, Event::GuildIntegrationsUpdate(event) => { - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); tokio_handle.spawn_fn(move || { @@ -365,7 +365,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, Event::GuildMemberAdd(mut event) => { update!(update_with_guild_member_add, @event); - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); tokio_handle.spawn_fn(move || { @@ -379,7 +379,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, }, Event::GuildMemberRemove(event) => { let _member = update!(update_with_guild_member_remove, event); - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); feature_cache! {{ @@ -396,7 +396,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, }, Event::GuildMemberUpdate(event) => { let _before = update!(update_with_guild_member_update, event); - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); feature_cache! { @@ -425,7 +425,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, Event::GuildMembersChunk(event) => { update!(update_with_guild_members_chunk, event); - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); tokio_handle.spawn_fn(move || { @@ -440,7 +440,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, Event::GuildRoleCreate(event) => { update!(update_with_guild_role_create, event); - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); tokio_handle.spawn_fn(move || { @@ -450,7 +450,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, }, Event::GuildRoleDelete(event) => { let _role = update!(update_with_guild_role_delete, event); - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); feature_cache! {{ @@ -467,7 +467,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, }, Event::GuildRoleUpdate(event) => { let _before = update!(update_with_guild_role_update, event); - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); feature_cache! {{ @@ -485,7 +485,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, Event::GuildUnavailable(event) => { update!(update_with_guild_unavailable, event); - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); tokio_handle.spawn_fn(move || { @@ -496,7 +496,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, Event::GuildUpdate(event) => { update!(update_with_guild_update, event); - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); feature_cache! { @@ -522,7 +522,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, // Already handled by the framework check macro Event::MessageCreate(_) => {}, Event::MessageDeleteBulk(event) => { - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); tokio_handle.spawn_fn(move || { @@ -535,7 +535,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, }); }, Event::MessageDelete(event) => { - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); tokio_handle.spawn_fn(move || { @@ -548,7 +548,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, }); }, Event::MessageUpdate(event) => { - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); tokio_handle.spawn_fn(move || { @@ -559,7 +559,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, Event::PresencesReplace(event) => { update!(update_with_presences_replace, event); - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); tokio_handle.spawn_fn(move || { @@ -570,7 +570,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, Event::PresenceUpdate(mut event) => { update!(update_with_presence_update, @event); - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); tokio_handle.spawn_fn(move || { @@ -580,7 +580,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, }, Event::ReactionAdd(event) => { let h = event_handler.clone(); - let context = context(conn, data); + let context = context(conn, data, tokio_handle); tokio_handle.spawn_fn(move || { h.on_reaction_add(context, event.reaction); Ok(()) @@ -588,14 +588,14 @@ fn handle_event<H: EventHandler + 'static>(event: Event, }, Event::ReactionRemove(event) => { let h = event_handler.clone(); - let context = context(conn, data); + let context = context(conn, data, tokio_handle); tokio_handle.spawn_fn(move || { h.on_reaction_remove(context, event.reaction); Ok(()) }); }, Event::ReactionRemoveAll(event) => { - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); tokio_handle.spawn_fn(move || { @@ -616,7 +616,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, let _ = wait_for_guilds() .map(|_| { - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); tokio_handle.spawn_fn(move || { @@ -625,7 +625,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, }); }); } else { - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); tokio_handle.spawn_fn(move || { @@ -636,7 +636,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, } }, Event::Resumed(event) => { - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); tokio_handle.spawn_fn(move || { @@ -645,7 +645,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, }); }, Event::TypingStart(event) => { - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); tokio_handle.spawn_fn(move || { @@ -654,7 +654,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, }); }, Event::Unknown(event) => { - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); tokio_handle.spawn_fn(move || { @@ -664,7 +664,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, }, Event::UserUpdate(event) => { let _before = update!(update_with_user_update, event); - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); feature_cache! {{ @@ -680,7 +680,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, }} }, Event::VoiceServerUpdate(event) => { - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); tokio_handle.spawn_fn(move || { @@ -691,7 +691,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, Event::VoiceStateUpdate(event) => { update!(update_with_voice_state_update, event); - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); tokio_handle.spawn_fn(move || { @@ -704,7 +704,7 @@ fn handle_event<H: EventHandler + 'static>(event: Event, }); }, Event::WebhookUpdate(event) => { - let context = context(conn, data); + let context = context(conn, data, tokio_handle); let h = event_handler.clone(); tokio_handle.spawn_fn(move || { |