aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--planetwars-client/src/main.rs10
-rw-r--r--planetwars-server/src/modules/bot_api.rs19
2 files changed, 25 insertions, 4 deletions
diff --git a/planetwars-client/src/main.rs b/planetwars-client/src/main.rs
index d995ebc..0fbcdb2 100644
--- a/planetwars-client/src/main.rs
+++ b/planetwars-client/src/main.rs
@@ -6,13 +6,21 @@ use pb::bot_api_service_client::BotApiServiceClient;
use tokio_stream::wrappers::UnboundedReceiverStream;
use tokio::sync::mpsc;
+use tonic::{metadata::MetadataValue, transport::Channel, Request};
#[tokio::main]
async fn main() {
- let mut client = BotApiServiceClient::connect("http://localhost:50051")
+ let channel = Channel::from_static("http://localhost:50051")
+ .connect()
.await
.unwrap();
+ let mut client = BotApiServiceClient::with_interceptor(channel, |mut req: Request<()>| {
+ let player_id: MetadataValue<_> = "test_player".parse().unwrap();
+ req.metadata_mut().insert("player_id", player_id);
+ Ok(req)
+ });
+
let (tx, rx) = mpsc::unbounded_channel();
let mut stream = client
.connect_bot(UnboundedReceiverStream::new(rx))
diff --git a/planetwars-server/src/modules/bot_api.rs b/planetwars-server/src/modules/bot_api.rs
index 2face62..f6e4d5c 100644
--- a/planetwars-server/src/modules/bot_api.rs
+++ b/planetwars-server/src/modules/bot_api.rs
@@ -62,10 +62,23 @@ impl pb::bot_api_service_server::BotApiService for BotApiServer {
&self,
req: Request<Streaming<pb::PlayerRequestResponse>>,
) -> Result<Response<Self::ConnectBotStream>, Status> {
- println!("bot connected");
+ // TODO: clean up errors
+ let player_id = req
+ .metadata()
+ .get("player_id")
+ .ok_or_else(|| Status::unauthenticated("no player_id provided"))?;
+
+ let player_id_str = player_id
+ .to_str()
+ .map_err(|_| Status::invalid_argument("unreadable string"))?;
+
+ let sync_data = self
+ .router
+ .get(player_id_str)
+ .ok_or_else(|| Status::not_found("player_id not found"))?;
+
let stream = req.into_inner();
- // TODO: return error when player does not exist
- let sync_data = self.router.get("test_player").unwrap();
+
sync_data.tx.send(stream).unwrap();
Ok(Response::new(UnboundedReceiverStream::new(
sync_data.server_messages,