fix: clippy warnings
This commit is contained in:
parent
2fd10446b6
commit
d9572be9bc
7 changed files with 57 additions and 34 deletions
|
@ -28,7 +28,7 @@ impl Coordinate {
|
||||||
pub fn from_index(index: usize) -> Self {
|
pub fn from_index(index: usize) -> Self {
|
||||||
let rank = (index / 8) as isize;
|
let rank = (index / 8) as isize;
|
||||||
let file = (index % 8) as isize;
|
let file = (index % 8) as isize;
|
||||||
return Self { rank, file };
|
Self { rank, file }
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn parse_algebraic(s: &str) -> Result<Self, NotationError> {
|
pub fn parse_algebraic(s: &str) -> Result<Self, NotationError> {
|
||||||
|
@ -49,8 +49,7 @@ impl Coordinate {
|
||||||
|
|
||||||
let rank = s
|
let rank = s
|
||||||
.chars()
|
.chars()
|
||||||
.skip(1)
|
.nth(1)
|
||||||
.next()
|
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.to_digit(9)
|
.to_digit(9)
|
||||||
.map(|v| v - 1)
|
.map(|v| v - 1)
|
||||||
|
@ -317,7 +316,7 @@ impl Board {
|
||||||
let white_checked = black_moves.into_iter().any(|m| {
|
let white_checked = black_moves.into_iter().any(|m| {
|
||||||
self.board[m.to.to_index()] == Some(Side::White | PieceType::King)
|
self.board[m.to.to_index()] == Some(Side::White | PieceType::King)
|
||||||
});
|
});
|
||||||
return BySide {
|
BySide {
|
||||||
black: black_checked,
|
black: black_checked,
|
||||||
white: white_checked,
|
white: white_checked,
|
||||||
}
|
}
|
||||||
|
|
|
@ -204,7 +204,7 @@ fn generate_castling_moves(board: &Board, moves: &mut Vec<Move>) {
|
||||||
if board.get(mid).is_some() {
|
if board.get(mid).is_some() {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
let test_state = Move::new(king_from, mid).make(&board);
|
let test_state = Move::new(king_from, mid).make(board);
|
||||||
if *test_state.calc_check_state().get(board.to_move) {
|
if *test_state.calc_check_state().get(board.to_move) {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
@ -294,15 +294,13 @@ fn generate_pawn_moves(board: &Board, moves: &mut Vec<Move>) {
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
|
||||||
let mv = Move {
|
Move {
|
||||||
from,
|
from,
|
||||||
to,
|
to,
|
||||||
other: None,
|
other: None,
|
||||||
promotions,
|
promotions,
|
||||||
set_en_passant,
|
set_en_passant,
|
||||||
};
|
}
|
||||||
|
|
||||||
mv
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let (start_rank, direction) = match board.to_move {
|
let (start_rank, direction) = match board.to_move {
|
||||||
|
|
|
@ -9,7 +9,7 @@ fn perft_board(board: &Board, depth: u64, start_depth: u64) -> u64 {
|
||||||
let mut moves = vec![];
|
let mut moves = vec![];
|
||||||
crate::chess::mv::generate_pseudolegal(board, &mut moves);
|
crate::chess::mv::generate_pseudolegal(board, &mut moves);
|
||||||
|
|
||||||
let count = moves.into_par_iter().map(|mv| {
|
moves.into_par_iter().map(|mv| {
|
||||||
let mut count = 0;
|
let mut count = 0;
|
||||||
if let Some(promotions) = mv.promotions {
|
if let Some(promotions) = mv.promotions {
|
||||||
for promotion in promotions {
|
for promotion in promotions {
|
||||||
|
@ -44,9 +44,7 @@ fn perft_board(board: &Board, depth: u64, start_depth: u64) -> u64 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
count
|
count
|
||||||
}).sum();
|
}).sum()
|
||||||
|
|
||||||
count
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_perft(fen: &str, depth: u64, expected_positions: u64) -> bool {
|
pub fn run_perft(fen: &str, depth: u64, expected_positions: u64) -> bool {
|
||||||
|
|
|
@ -3,18 +3,16 @@ use std::collections::HashMap;
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
use xtra::{prelude::*, WeakAddress};
|
use xtra::{prelude::*, WeakAddress};
|
||||||
|
|
||||||
use crate::{prelude::{Board, Move}, constants::START_FEN, chess::{Side, mv::generate_legal}, player::{Player, OutgoingPlayerEvent, IncomingPlayerEvent}};
|
use crate::{prelude::Board, constants::START_FEN, chess::{Side, mv::generate_legal}, player::{Player, OutgoingPlayerEvent, IncomingPlayerEvent}};
|
||||||
|
|
||||||
#[derive(Actor)]
|
#[derive(Actor, Default)]
|
||||||
pub struct GameManager {
|
pub struct GameManager {
|
||||||
games: HashMap<Uuid, Address<ChessGame>>,
|
games: HashMap<Uuid, Address<ChessGame>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl GameManager {
|
impl GameManager {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
Self {
|
Default::default()
|
||||||
games: HashMap::new(),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
use axum::Extension;
|
use axum::Extension;
|
||||||
use chs::{prelude::*, game::GameManager};
|
use chs::game::GameManager;
|
||||||
use tower_http::trace::TraceLayer;
|
use tower_http::trace::TraceLayer;
|
||||||
use tracing_subscriber::prelude::*;
|
use tracing_subscriber::prelude::*;
|
||||||
use xtra::Mailbox;
|
use xtra::Mailbox;
|
||||||
|
@ -22,7 +22,11 @@ async fn main() {
|
||||||
.layer(Extension(game_manager))
|
.layer(Extension(game_manager))
|
||||||
.layer(TraceLayer::new_for_http());
|
.layer(TraceLayer::new_for_http());
|
||||||
|
|
||||||
axum::Server::bind(&format!("0.0.0.0:3000").parse().unwrap())
|
let port: u16 = std::env::var("PORT")
|
||||||
|
.map(|s| s.parse().unwrap())
|
||||||
|
.unwrap_or(3000);
|
||||||
|
|
||||||
|
axum::Server::bind(&format!("0.0.0.0:{port}").parse().unwrap())
|
||||||
.serve(app.into_make_service())
|
.serve(app.into_make_service())
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
use axum::{Router, extract::{WebSocketUpgrade, Path, ws::{Message, WebSocket}}, response::IntoResponse, routing::{get, get_service}, http::{StatusCode, Uri}, Extension};
|
use axum::{Router, extract::{WebSocketUpgrade, Path, ws::{Message, WebSocket}}, response::IntoResponse, routing::get, Extension};
|
||||||
use futures::{StreamExt, SinkExt, stream::{SplitStream, SplitSink}, channel::mpsc::{self, UnboundedSender}};
|
use futures::{StreamExt, SinkExt, stream::{SplitStream, SplitSink}, channel::mpsc::{self, UnboundedSender}};
|
||||||
use tokio::task::JoinHandle;
|
use tokio::task::JoinHandle;
|
||||||
use tower_http::services::ServeDir;
|
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
use xtra::{Mailbox, Address};
|
use xtra::{Mailbox, Address};
|
||||||
|
|
||||||
|
@ -9,6 +8,7 @@ use crate::{player::{Player, IncomingPlayerEvent, OutgoingPlayerEvent, GameInfo}
|
||||||
#[cfg(not(debug_assertions))]
|
#[cfg(not(debug_assertions))]
|
||||||
use crate::assets::StaticFile;
|
use crate::assets::StaticFile;
|
||||||
|
|
||||||
|
#[allow(clippy::let_and_return)]
|
||||||
pub fn routes() -> Router {
|
pub fn routes() -> Router {
|
||||||
let router = Router::new()
|
let router = Router::new()
|
||||||
.route("/ws/:id", get(ws_handler));
|
.route("/ws/:id", get(ws_handler));
|
||||||
|
@ -50,8 +50,7 @@ async fn handle_socket(socket: WebSocket, id: Uuid, game_manager: Address<GameMa
|
||||||
let res = game_manager.send(JoinGame { game_id: id, player: player.downgrade() }).await
|
let res = game_manager.send(JoinGame { game_id: id, player: player.downgrade() }).await
|
||||||
.expect("game manager disconnected");
|
.expect("game manager disconnected");
|
||||||
|
|
||||||
if let Some(res) = res {
|
if let Some(JoinGameResponse::Success { side, game }) = res {
|
||||||
if let JoinGameResponse::Success { side, game } = res {
|
|
||||||
player.send(GameInfo { side, game }).await.expect("player disconnected");
|
player.send(GameInfo { side, game }).await.expect("player disconnected");
|
||||||
let rx_task = socket_recv(rx, player);
|
let rx_task = socket_recv(rx, player);
|
||||||
|
|
||||||
|
@ -60,7 +59,6 @@ async fn handle_socket(socket: WebSocket, id: Uuid, game_manager: Address<GameMa
|
||||||
_ = tx_task => {},
|
_ = tx_task => {},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn socket_send(mut tx: SplitSink<WebSocket, Message>) -> (UnboundedSender<OutgoingPlayerEvent>, JoinHandle<()>) {
|
fn socket_send(mut tx: SplitSink<WebSocket, Message>) -> (UnboundedSender<OutgoingPlayerEvent>, JoinHandle<()>) {
|
||||||
|
@ -85,7 +83,7 @@ fn socket_send(mut tx: SplitSink<WebSocket, Message>) -> (UnboundedSender<Outgoi
|
||||||
}
|
}
|
||||||
|
|
||||||
fn socket_recv(mut rx: SplitStream<WebSocket>, player: Address<Player>) -> JoinHandle<()> {
|
fn socket_recv(mut rx: SplitStream<WebSocket>, player: Address<Player>) -> JoinHandle<()> {
|
||||||
let task = tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
while let Some(msg) = rx.next().await {
|
while let Some(msg) = rx.next().await {
|
||||||
if let Ok(msg) = msg {
|
if let Ok(msg) = msg {
|
||||||
match msg {
|
match msg {
|
||||||
|
@ -115,7 +113,5 @@ fn socket_recv(mut rx: SplitStream<WebSocket>, player: Address<Player>) -> JoinH
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
|
|
||||||
task
|
|
||||||
}
|
}
|
||||||
|
|
30
static/test.html
Normal file
30
static/test.html
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Document</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
function wsRoute(id) {
|
||||||
|
const loc = window.location;
|
||||||
|
let newUri = loc.protocol === "https:" ? "wss://" : "ws://";
|
||||||
|
newUri += loc.host + '/ws/' + id;
|
||||||
|
return newUri;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Random UUID
|
||||||
|
const ws = new WebSocket(wsRoute('7d3a9dac-71db-4ade-af46-f080777969a4'));
|
||||||
|
ws.onopen = function () {
|
||||||
|
ws.send('hello, world!');
|
||||||
|
ws.send('hello, world!');
|
||||||
|
ws.send('hello, world!');
|
||||||
|
}
|
||||||
|
ws.onmessage = function (data) {
|
||||||
|
console.log(data);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Reference in a new issue