aboutsummaryrefslogtreecommitdiff
path: root/src/client/bridge/gateway/shard_runner.rs
diff options
context:
space:
mode:
authorZeyla Hellyer <[email protected]>2018-01-18 08:33:27 -0800
committerZeyla Hellyer <[email protected]>2018-01-18 08:33:27 -0800
commit9232b8f065deb4637a74e7f85ab617bb527c51be (patch)
tree9c2cc2bd6b6238a1bd039e9ad4900e8705197af2 /src/client/bridge/gateway/shard_runner.rs
parentFix travis' cache by chmoding $HOME/.cargo (#252) (diff)
downloadserenity-9232b8f065deb4637a74e7f85ab617bb527c51be.tar.xz
serenity-9232b8f065deb4637a74e7f85ab617bb527c51be.zip
Use an InterMessage to communicate over gateway
Instead of communicating over the gateway in a split form of a `serde_json::Value` or a `client::bridge::gateway::ShardClientMessage`, wrap them both into a single enum for better interaction between the client, gateway, and voice modules.
Diffstat (limited to 'src/client/bridge/gateway/shard_runner.rs')
-rw-r--r--src/client/bridge/gateway/shard_runner.rs22
1 files changed, 12 insertions, 10 deletions
diff --git a/src/client/bridge/gateway/shard_runner.rs b/src/client/bridge/gateway/shard_runner.rs
index 8781149..ba9e00e 100644
--- a/src/client/bridge/gateway/shard_runner.rs
+++ b/src/client/bridge/gateway/shard_runner.rs
@@ -1,6 +1,6 @@
-use gateway::{ReconnectType, Shard, ShardAction};
+use gateway::{InterMessage, ReconnectType, Shard, ShardAction};
use internal::prelude::*;
-use internal::ws_impl::ReceiverExt;
+use internal::ws_impl::{ReceiverExt, SenderExt};
use model::event::{Event, GatewayEvent};
use parking_lot::Mutex;
use serde::Deserialize;
@@ -17,8 +17,6 @@ use websocket::WebSocketError;
#[cfg(feature = "framework")]
use framework::Framework;
-#[cfg(feature = "voice")]
-use internal::ws_impl::SenderExt;
/// A runner for managing a [`Shard`] and its respective WebSocket client.
///
@@ -30,9 +28,9 @@ pub struct ShardRunner<H: EventHandler + Send + Sync + 'static> {
framework: Arc<Mutex<Option<Box<Framework + Send>>>>,
manager_tx: Sender<ShardManagerMessage>,
// channel to receive messages from the shard manager and dispatches
- runner_rx: Receiver<ShardClientMessage>,
+ runner_rx: Receiver<InterMessage>,
// channel to send messages to the shard runner from the shard manager
- runner_tx: Sender<ShardClientMessage>,
+ runner_tx: Sender<InterMessage>,
shard: Shard,
threadpool: ThreadPool,
}
@@ -181,7 +179,7 @@ impl<H: EventHandler + Send + Sync + 'static> ShardRunner<H> {
}
/// Clones the internal copy of the Sender to the shard runner.
- pub(super) fn runner_tx(&self) -> Sender<ShardClientMessage> {
+ pub(super) fn runner_tx(&self) -> Sender<InterMessage> {
self.runner_tx.clone()
}
@@ -250,9 +248,9 @@ impl<H: EventHandler + Send + Sync + 'static> ShardRunner<H> {
//
// This always returns true, except in the case that the shard manager asked
// the runner to shutdown.
- fn handle_rx_value(&mut self, value: ShardClientMessage) -> bool {
+ fn handle_rx_value(&mut self, value: InterMessage) -> bool {
match value {
- ShardClientMessage::Manager(x) => match x {
+ InterMessage::Client(ShardClientMessage::Manager(x)) => match x {
ShardManagerMessage::Restart(id) |
ShardManagerMessage::Shutdown(id) => {
self.checked_shutdown(id)
@@ -273,7 +271,7 @@ impl<H: EventHandler + Send + Sync + 'static> ShardRunner<H> {
true
},
},
- ShardClientMessage::Runner(x) => match x {
+ InterMessage::Client(ShardClientMessage::Runner(x)) => match x {
ShardRunnerMessage::ChunkGuilds { guild_ids, limit, query } => {
self.shard.chunk_guilds(
guild_ids,
@@ -320,6 +318,10 @@ impl<H: EventHandler + Send + Sync + 'static> ShardRunner<H> {
self.shard.update_presence().is_ok()
},
},
+ InterMessage::Json(value) => {
+ // Value must be forwarded over the websocket
+ self.shard.client.send_json(&value).is_ok()
+ },
}
}