aboutsummaryrefslogtreecommitdiff
path: root/planetwars-client
diff options
context:
space:
mode:
Diffstat (limited to 'planetwars-client')
-rw-r--r--planetwars-client/Cargo.toml1
-rw-r--r--planetwars-client/src/main.rs26
2 files changed, 24 insertions, 3 deletions
diff --git a/planetwars-client/Cargo.toml b/planetwars-client/Cargo.toml
index c83950b..2ba646b 100644
--- a/planetwars-client/Cargo.toml
+++ b/planetwars-client/Cargo.toml
@@ -15,6 +15,7 @@ toml = "0.5"
planetwars-matchrunner = { path = "../planetwars-matchrunner" }
clap = { version = "3.2", features = ["derive", "env"]}
shlex = "1.1"
+thiserror = "1.0"
[build-dependencies]
tonic-build = "0.7.2"
diff --git a/planetwars-client/src/main.rs b/planetwars-client/src/main.rs
index 1821fd3..6ae2a31 100644
--- a/planetwars-client/src/main.rs
+++ b/planetwars-client/src/main.rs
@@ -79,7 +79,12 @@ async fn main() {
)
.await
.unwrap();
- run_player(bot_config, created_match.player_key, channel).await;
+ match run_player(bot_config, created_match.player_key, channel).await {
+ Ok(()) => (),
+ Err(RunPlayerError::RunBotError(err)) => {
+ println!("Error running bot: {}", err)
+ }
+ }
println!(
"Match completed. Watch the replay at {}",
created_match.match_url
@@ -102,7 +107,17 @@ async fn create_match(
res.map(|response| response.into_inner())
}
-async fn run_player(bot_config: BotConfig, player_key: String, channel: Channel) {
+#[derive(thiserror::Error, Debug)]
+enum RunPlayerError {
+ #[error("error running bot")]
+ RunBotError(std::io::Error),
+}
+
+async fn run_player(
+ bot_config: BotConfig,
+ player_key: String,
+ channel: Channel,
+) -> Result<(), RunPlayerError> {
let mut client = ClientApiServiceClient::with_interceptor(channel, |mut req: Request<()>| {
let player_key: MetadataValue<_> = player_key.parse().unwrap();
req.metadata_mut().insert("player_key", player_key);
@@ -128,7 +143,10 @@ async fn run_player(bot_config: BotConfig, player_key: String, channel: Channel)
while let Some(message) = stream.message().await.unwrap() {
match message.server_message {
Some(pb::PlayerApiServerMessageType::ActionRequest(req)) => {
- let moves = bot_process.communicate(&req.content).await.unwrap();
+ let moves = bot_process
+ .communicate(&req.content)
+ .await
+ .map_err(RunPlayerError::RunBotError)?;
let action = pb::PlayerAction {
action_request_id: req.action_request_id,
content: moves.as_bytes().to_vec(),
@@ -141,4 +159,6 @@ async fn run_player(bot_config: BotConfig, player_key: String, channel: Channel)
_ => {} // pass
}
}
+
+ Ok(())
}