move team to game client
This commit is contained in:
parent
14ce0ebf7e
commit
f3124bcf03
16
src/game.rs
16
src/game.rs
@ -11,21 +11,23 @@ static TURN: AtomicBool = AtomicBool::new(false);
|
|||||||
static BOARD: AtomicU32 = AtomicU32::new(0);
|
static BOARD: AtomicU32 = AtomicU32::new(0);
|
||||||
|
|
||||||
pub struct GameClient {
|
pub struct GameClient {
|
||||||
res_buf: Vec<u8, 4096>
|
res_buf: Vec<u8, 4096>,
|
||||||
|
team: Team
|
||||||
}
|
}
|
||||||
impl GameClient {
|
impl GameClient {
|
||||||
pub fn new() -> Self {
|
pub fn new(team: Team) -> Self {
|
||||||
Self {
|
Self {
|
||||||
res_buf: Vec::new(),
|
res_buf: Vec::new(),
|
||||||
|
team
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub async fn handle_request<'a>(&'a mut self, path: &str, team: Team) -> (HttpResCode, &'static str, &'a [u8]) {
|
pub async fn handle_request<'a>(&'a mut self, path: &str) -> (HttpResCode, &'static str, &'a [u8]) {
|
||||||
if (path.starts_with("/ttt/cell") && path.len() == 10) || path == "/ttt/board" {
|
if (path.starts_with("/ttt/cell") && path.len() == 10) || path == "/ttt/board" {
|
||||||
let mut board = BOARD.load(Ordering::Acquire);
|
let mut board = BOARD.load(Ordering::Acquire);
|
||||||
let mut turn = TURN.load(Ordering::Acquire);
|
let mut turn = TURN.load(Ordering::Acquire);
|
||||||
|
|
||||||
// just return correct board in case of unauthorized move
|
// just return correct board in case of unauthorized move
|
||||||
if path.starts_with("/ttt/cell") && team == turn.into() {
|
if path.starts_with("/ttt/cell") && self.team == turn.into() {
|
||||||
let clicked_c: Cell = match TryInto::<Cell>::try_into(
|
let clicked_c: Cell = match TryInto::<Cell>::try_into(
|
||||||
unwrap(path.chars().nth(9).ok_or("no 9th char")).await,
|
unwrap(path.chars().nth(9).ok_or("no 9th char")).await,
|
||||||
) {
|
) {
|
||||||
@ -39,8 +41,8 @@ impl GameClient {
|
|||||||
{
|
{
|
||||||
return (HttpResCode::Forbidden, "", &[]);
|
return (HttpResCode::Forbidden, "", &[]);
|
||||||
}
|
}
|
||||||
board = board | 2_u32.pow((team as u32 * 9) + clicked_c as u32);
|
board = board | 2_u32.pow((self.team as u32 * 9) + clicked_c as u32);
|
||||||
turn = (!team).into();
|
turn = (!self.team).into();
|
||||||
BOARD.store(board, Ordering::Release);
|
BOARD.store(board, Ordering::Release);
|
||||||
TURN.store(turn, Ordering::Release);
|
TURN.store(turn, Ordering::Release);
|
||||||
}
|
}
|
||||||
@ -66,7 +68,7 @@ impl GameClient {
|
|||||||
b"<div class=\"cell\" style=\"background-color:red\"></div>",
|
b"<div class=\"cell\" style=\"background-color:red\"></div>",
|
||||||
)).await;
|
)).await;
|
||||||
}
|
}
|
||||||
None => if team == turn.into() {
|
None => if self.team == turn.into() {
|
||||||
unwrap(write!(
|
unwrap(write!(
|
||||||
self.res_buf,
|
self.res_buf,
|
||||||
"<button class=\"cell\" hx-post=\"/ttt/cell{}\" hx-trigger=\"click\" hx-target=\"#grid\" hx-swap=\"innerHTML\"></button>",
|
"<button class=\"cell\" hx-post=\"/ttt/cell{}\" hx-trigger=\"click\" hx-target=\"#grid\" hx-swap=\"innerHTML\"></button>",
|
||||||
|
@ -20,7 +20,7 @@ pub async fn listen_task(stack: embassy_net::Stack<'static>, team: Team, port: u
|
|||||||
let mut buf = [0; 4096];
|
let mut buf = [0; 4096];
|
||||||
let mut res_head_buf = Vec::<u8, 4096>::new();
|
let mut res_head_buf = Vec::<u8, 4096>::new();
|
||||||
|
|
||||||
let mut game_client = GameClient::new();
|
let mut game_client = GameClient::new(team);
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
Timer::after_secs(0).await;
|
Timer::after_secs(0).await;
|
||||||
@ -116,7 +116,7 @@ pub async fn listen_task(stack: embassy_net::Stack<'static>, team: Team, port: u
|
|||||||
"javascript",
|
"javascript",
|
||||||
include_bytes!("../web/htmx.js"),
|
include_bytes!("../web/htmx.js"),
|
||||||
),
|
),
|
||||||
p => game_client.handle_request(p, team).await
|
p => game_client.handle_request(p).await
|
||||||
};
|
};
|
||||||
|
|
||||||
res_head_buf.clear();
|
res_head_buf.clear();
|
||||||
|
Loading…
Reference in New Issue
Block a user