extract matchrunner crate from planetwars-cli
This commit is contained in:
parent
e145947d05
commit
4a077c7c65
10 changed files with 28 additions and 12 deletions
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
members = [
|
members = [
|
||||||
"planetwars-rules",
|
"planetwars-rules",
|
||||||
|
"planetwars-matchrunner",
|
||||||
"planetwars-cli",
|
"planetwars-cli",
|
||||||
"planetwars-server",
|
"planetwars-server",
|
||||||
]
|
]
|
||||||
|
|
|
@ -15,10 +15,10 @@ rand = "0.6"
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
toml = "0.5"
|
toml = "0.5"
|
||||||
planetwars-rules = { path = "../planetwars-rules" }
|
|
||||||
clap = { version = "3.0.0-rc.8", features = ["derive"] }
|
clap = { version = "3.0.0-rc.8", features = ["derive"] }
|
||||||
chrono = { version = "0.4", features = ["serde"] }
|
chrono = { version = "0.4", features = ["serde"] }
|
||||||
shlex = "1.1"
|
shlex = "1.1"
|
||||||
|
planetwars-matchrunner = { path = "../planetwars-matchrunner" }
|
||||||
|
|
||||||
rust-embed = "6.3.0"
|
rust-embed = "6.3.0"
|
||||||
axum = { version = "0.4", features = ["ws"] }
|
axum = { version = "0.4", features = ["ws"] }
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
use std::io;
|
use std::io;
|
||||||
|
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
|
use planetwars_matchrunner::{run_match, MatchConfig, MatchPlayer};
|
||||||
|
|
||||||
use crate::match_runner::MatchConfig;
|
|
||||||
use crate::match_runner::{self, MatchPlayer};
|
|
||||||
use crate::workspace::Workspace;
|
use crate::workspace::Workspace;
|
||||||
#[derive(Parser)]
|
#[derive(Parser)]
|
||||||
pub struct RunMatchCommand {
|
pub struct RunMatchCommand {
|
||||||
|
@ -26,7 +25,8 @@ impl RunMatchCommand {
|
||||||
let bot = workspace.get_bot(&bot_name)?;
|
let bot = workspace.get_bot(&bot_name)?;
|
||||||
players.push(MatchPlayer {
|
players.push(MatchPlayer {
|
||||||
name: bot_name.clone(),
|
name: bot_name.clone(),
|
||||||
bot,
|
path: bot.path.clone(),
|
||||||
|
argv: bot.config.get_run_argv(),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ impl RunMatchCommand {
|
||||||
players,
|
players,
|
||||||
};
|
};
|
||||||
|
|
||||||
match_runner::run_match(match_config).await;
|
run_match(match_config).await;
|
||||||
println!("match completed successfully");
|
println!("match completed successfully");
|
||||||
// TODO: maybe print the match result as well?
|
// TODO: maybe print the match result as well?
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
mod commands;
|
mod commands;
|
||||||
mod match_runner;
|
|
||||||
mod web;
|
mod web;
|
||||||
mod workspace;
|
mod workspace;
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ use axum::{
|
||||||
AddExtensionLayer, Json,
|
AddExtensionLayer, Json,
|
||||||
};
|
};
|
||||||
use mime_guess;
|
use mime_guess;
|
||||||
|
use planetwars_matchrunner::MatchMeta;
|
||||||
use rust_embed::RustEmbed;
|
use rust_embed::RustEmbed;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::{
|
use std::{
|
||||||
|
@ -18,7 +19,7 @@ use std::{
|
||||||
sync::Arc,
|
sync::Arc,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::{match_runner::MatchMeta, workspace::Workspace};
|
use crate::workspace::Workspace;
|
||||||
|
|
||||||
struct State {
|
struct State {
|
||||||
workspace: Workspace,
|
workspace: Workspace,
|
||||||
|
|
16
planetwars-matchrunner/Cargo.toml
Normal file
16
planetwars-matchrunner/Cargo.toml
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
[package]
|
||||||
|
name = "planetwars-matchrunner"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
futures-core = "0.3"
|
||||||
|
futures = "0.3"
|
||||||
|
tokio = { version = "1", features = ["full"] }
|
||||||
|
rand = "0.6"
|
||||||
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
|
serde_json = "1.0"
|
||||||
|
planetwars-rules = { path = "../planetwars-rules" }
|
||||||
|
chrono = { version = "0.4", features = ["serde"] }
|
|
@ -12,8 +12,6 @@ use match_context::MatchCtx;
|
||||||
use planetwars_rules::PwConfig;
|
use planetwars_rules::PwConfig;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::workspace::bot::WorkspaceBot;
|
|
||||||
|
|
||||||
use self::match_context::{EventBus, PlayerHandle};
|
use self::match_context::{EventBus, PlayerHandle};
|
||||||
|
|
||||||
pub struct MatchConfig {
|
pub struct MatchConfig {
|
||||||
|
@ -37,7 +35,8 @@ pub struct PlayerInfo {
|
||||||
|
|
||||||
pub struct MatchPlayer {
|
pub struct MatchPlayer {
|
||||||
pub name: String,
|
pub name: String,
|
||||||
pub bot: WorkspaceBot,
|
pub path: PathBuf,
|
||||||
|
pub argv: Vec<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn run_match(config: MatchConfig) {
|
pub async fn run_match(config: MatchConfig) {
|
||||||
|
@ -56,8 +55,8 @@ pub async fn run_match(config: MatchConfig) {
|
||||||
.map(|(player_id, player)| {
|
.map(|(player_id, player)| {
|
||||||
let player_id = (player_id + 1) as u32;
|
let player_id = (player_id + 1) as u32;
|
||||||
let bot = bot_runner::Bot {
|
let bot = bot_runner::Bot {
|
||||||
working_dir: player.bot.path.clone(),
|
working_dir: player.path.clone(),
|
||||||
argv: player.bot.config.get_run_argv(),
|
argv: player.argv.clone(),
|
||||||
};
|
};
|
||||||
let handle = bot_runner::run_local_bot(player_id, event_bus.clone(), bot);
|
let handle = bot_runner::run_local_bot(player_id, event_bus.clone(), bot);
|
||||||
(player_id, Box::new(handle) as Box<dyn PlayerHandle>)
|
(player_id, Box::new(handle) as Box<dyn PlayerHandle>)
|
Loading…
Reference in a new issue