From 68bf72c0718300b828eddc808519b120b3fca1ae Mon Sep 17 00:00:00 2001 From: Christine Dodrill Date: Wed, 18 Dec 2019 02:39:20 +0000 Subject: [PATCH] trying to cache data --- src/battlesnake.rs | 2 +- src/main.rs | 55 ++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 49 insertions(+), 8 deletions(-) diff --git a/src/battlesnake.rs b/src/battlesnake.rs index 18cbd79..b9bc1f2 100644 --- a/src/battlesnake.rs +++ b/src/battlesnake.rs @@ -85,7 +85,7 @@ impl Board { } if self.is_safe(&down) { - result.push((up, 1)); + result.push((down, 1)); } result diff --git a/src/main.rs b/src/main.rs index 0419895..a4514ed 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,11 +4,20 @@ #[macro_use] extern crate rocket_contrib; #[macro_use] extern crate serde_derive; +use rocket::State; use rocket_contrib::json::Json; use pathfinding::grid::Grid; +use std::collections::HashMap; +use std::sync::{Arc, Mutex}; mod battlesnake; +type Cache = Arc>>; +pub struct GameState { + path: Option>, + target: battlesnake::Coord, +} + #[get("/")] fn index() -> &'static str { "Hello, world!" @@ -20,7 +29,17 @@ fn ping() -> &'static str { } #[post("/begin", format = "json", data = "")] -fn begin(msg: Json) -> Json { +fn begin(cache: State, msg: Json) -> Json { + let head = msg.you.body[0]; + let target = find_target(&msg); + let path = find_path(&msg, &head, &target); + let gs = GameState{ + target: *target, + path: path, + }; + + cache.inner().get_mut().unwrap().insert(msg.game.id, gs); + Json(battlesnake::StartResponse{ color: "#5ce8c3".to_string(), head_type: "beluga".to_string(), @@ -28,12 +47,29 @@ fn begin(msg: Json) -> Json Option> { + let path = pathfinding::directed::astar::astar( + head, + |n| msg.board.safe_neighbors(n).into_iter(), + |n| (battlesnake::manhattan(n, &target) as usize), + |n| n == target, + ); + + match path { + None => return None, + Some(x) => { + return Some(x.0); + }, + } +} + #[post("/move", format = "json", data = "")] fn make_move(msg: Json) -> Json { let target = find_target(&msg); println!("target: {:?}", target); let head = &msg.you.body[0]; + println!("me: {:?}", head); for ne in &msg.board.safe_neighbors(&head) { println!("{:?} {}", ne.0, battlesnake::Line{ start: &head, @@ -41,12 +77,12 @@ fn make_move(msg: Json) -> Json(gs: &'a battlesnake::SnakeRequest) -> &'a battlesnake::Coord } fn main() { + let map = HashMap::::new(); + let mutex_map = Mutex::from(map); + let arc_mutex_map = Arc::from(mutex_map); rocket::ignite().mount("/", routes![ index, begin, ping, make_move, - ]).launch(); + ]) + .manage(arc_mutex_map) + .launch(); }