Compare commits
4 Commits
6be3eae863
...
0.2.0
Author | SHA1 | Date | |
---|---|---|---|
e88d64ff63 | |||
3ca6c43c9a | |||
d4223be8b4 | |||
83d0780954 |
8
rust/Cargo.lock
generated
8
rust/Cargo.lock
generated
@@ -421,9 +421,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "4.0.15"
|
||||
version = "4.0.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6bf8832993da70a4c6d13c581f4463c2bdda27b9bf1c5498dc4365543abe6d6f"
|
||||
checksum = "2ef582e2c00a63a0c0aa1fb4a4870781c4f5729f51196d3537fa7c1c1992eaa3"
|
||||
dependencies = [
|
||||
"atty",
|
||||
"bitflags",
|
||||
@@ -1564,7 +1564,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "sea_battle_backend"
|
||||
version = "0.1.0"
|
||||
version = "0.2.0"
|
||||
dependencies = [
|
||||
"actix",
|
||||
"actix-cors",
|
||||
@@ -1588,7 +1588,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "sea_battle_cli_player"
|
||||
version = "0.1.0"
|
||||
version = "0.2.0"
|
||||
dependencies = [
|
||||
"clap",
|
||||
"crossterm",
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "sea_battle_backend"
|
||||
version = "0.1.0"
|
||||
version = "0.2.0"
|
||||
edition = "2021"
|
||||
license = "GPL-2.0-or-later"
|
||||
description = "A Sea Battle game backend server"
|
||||
@@ -12,7 +12,7 @@ categories = [ "games" ]
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
clap = { version = "4.0.15", features = ["derive"] }
|
||||
clap = { version = "4.0.16", features = ["derive"] }
|
||||
log = "0.4.17"
|
||||
env_logger = "0.9.0"
|
||||
serde = { version = "1.0.145", features = ["derive"] }
|
||||
|
@@ -12,3 +12,14 @@ pub struct Args {
|
||||
#[clap(short, long, value_parser)]
|
||||
pub cors: Option<String>,
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use crate::args::Args;
|
||||
|
||||
#[test]
|
||||
fn verify_cli() {
|
||||
use clap::CommandFactory;
|
||||
Args::command().debug_assert()
|
||||
}
|
||||
}
|
||||
|
@@ -361,7 +361,7 @@ impl BoatsLayout {
|
||||
mod test {
|
||||
use crate::data::boats_layout::{BoatDirection, BoatPosition, BoatsLayout, Coordinates};
|
||||
use crate::data::game_map::GameMap;
|
||||
use crate::data::{BotType, GameRules, PlayConfiguration, PrintableMap};
|
||||
use crate::data::*;
|
||||
|
||||
#[test]
|
||||
fn dist_coordinates_eq() {
|
||||
@@ -488,9 +488,7 @@ mod test {
|
||||
map_height: 5,
|
||||
boats_str: "1,1".to_string(),
|
||||
boats_can_touch: false,
|
||||
player_continue_on_hit: false,
|
||||
strike_timeout: None,
|
||||
bot_type: BotType::Random,
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
let mut boats = BoatsLayout(vec![
|
||||
|
@@ -4,7 +4,7 @@ use actix_web::{web, App, HttpRequest, HttpResponse, HttpServer, Responder};
|
||||
use actix_web_actors::ws;
|
||||
|
||||
use crate::args::Args;
|
||||
use crate::data::{GameRules, PlayConfiguration, VersionInfo};
|
||||
use crate::data::{BoatsLayout, GameRules, PlayConfiguration, VersionInfo};
|
||||
use crate::dispatcher_actor::DispatcherActor;
|
||||
use crate::human_player_ws::{HumanPlayerWS, StartMode};
|
||||
|
||||
@@ -28,6 +28,35 @@ async fn game_configuration() -> impl Responder {
|
||||
HttpResponse::Ok().json(PlayConfiguration::default())
|
||||
}
|
||||
|
||||
/// Get default game rules
|
||||
async fn default_game_rules() -> impl Responder {
|
||||
HttpResponse::Ok().json(GameRules::random_players_rules())
|
||||
}
|
||||
|
||||
/// Validate game rules
|
||||
async fn validate_game_rules(rules: web::Json<GameRules>) -> impl Responder {
|
||||
HttpResponse::Ok().json(rules.get_errors())
|
||||
}
|
||||
|
||||
/// Generate random boats layout
|
||||
async fn gen_boats_layout(rules: web::Json<GameRules>) -> impl Responder {
|
||||
let errors = rules.get_errors();
|
||||
if !errors.is_empty() {
|
||||
return HttpResponse::BadRequest().json(errors);
|
||||
}
|
||||
match BoatsLayout::gen_random_for_rules(&rules) {
|
||||
Ok(l) => HttpResponse::Ok().json(l),
|
||||
Err(e) => {
|
||||
log::error!(
|
||||
"Failed to generate boats layout for valid game rules: {} ! / Rules: {:?}",
|
||||
e,
|
||||
rules
|
||||
);
|
||||
HttpResponse::InternalServerError().json("Failed to generate random layout!")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(serde::Serialize, serde::Deserialize, Eq, PartialEq, Debug)]
|
||||
pub struct BotPlayQuery {
|
||||
#[serde(flatten)]
|
||||
@@ -135,6 +164,7 @@ async fn start_random(
|
||||
log::info!("New random play");
|
||||
resp
|
||||
}
|
||||
|
||||
pub async fn start_server(args: Args) -> std::io::Result<()> {
|
||||
log::info!("Start to listen on {}", args.listen_address);
|
||||
|
||||
@@ -155,6 +185,9 @@ pub async fn start_server(args: Args) -> std::io::Result<()> {
|
||||
.wrap(cors)
|
||||
.route("/version", web::get().to(version_information))
|
||||
.route("/config", web::get().to(game_configuration))
|
||||
.route("/game_rules/default", web::get().to(default_game_rules))
|
||||
.route("/game_rules/validate", web::post().to(validate_game_rules))
|
||||
.route("/generate_boats_layout", web::post().to(gen_boats_layout))
|
||||
.route("/play/bot", web::get().to(start_bot_play))
|
||||
.route("/play/create_invite", web::get().to(start_create_invite))
|
||||
.route("/play/accept_invite", web::get().to(start_accept_invite))
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "sea_battle_cli_player"
|
||||
version = "0.1.0"
|
||||
version = "0.2.0"
|
||||
edition = "2021"
|
||||
license = "GPL-2.0-or-later"
|
||||
description = "A Sea Battle game shell client"
|
||||
@@ -12,8 +12,8 @@ categories = [ "games" ]
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
sea_battle_backend = { path = "../sea_battle_backend", version = "0.1.0" }
|
||||
clap = { version = "4.0.15", features = ["derive"] }
|
||||
sea_battle_backend = { path = "../sea_battle_backend", version = "0.2.0" }
|
||||
clap = { version = "4.0.16", features = ["derive"] }
|
||||
log = "0.4.17"
|
||||
env_logger = "0.9.0"
|
||||
tui = "0.19.0"
|
||||
|
@@ -61,3 +61,14 @@ lazy_static::lazy_static! {
|
||||
pub fn cli_args() -> &'static CliArgs {
|
||||
&ARGS
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use crate::cli_args::CliArgs;
|
||||
|
||||
#[test]
|
||||
fn verify_cli() {
|
||||
use clap::CommandFactory;
|
||||
CliArgs::command().debug_assert()
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user