diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..ccd3dd8 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,23 @@ +name: Rust + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +env: + CARGO_TERM_COLOR: always + SQLX_OFFLINE: true + +jobs: + check-lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Check + run: cargo check + - name: Clippy + run: cargo clippy + - name: Format + run: cargo fmt --all --check \ No newline at end of file diff --git a/.sqlx/query-0b2f444f36572ca8f072efecea628c634231b06b9cd77677d5026c00ae770738.json b/.sqlx/query-0b2f444f36572ca8f072efecea628c634231b06b9cd77677d5026c00ae770738.json new file mode 100644 index 0000000..3740862 --- /dev/null +++ b/.sqlx/query-0b2f444f36572ca8f072efecea628c634231b06b9cd77677d5026c00ae770738.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT board FROM players WHERE id = $1 AND room_code = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "board", + "type_info": "BpcharArray" + } + ], + "parameters": { + "Left": [ + "Bpchar", + "Bpchar" + ] + }, + "nullable": [ + true + ] + }, + "hash": "0b2f444f36572ca8f072efecea628c634231b06b9cd77677d5026c00ae770738" +} diff --git a/.sqlx/query-1568b5ea82d844da39dc37f70a4129d89e3c8b6cd91d7738774445a66fa1338e.json b/.sqlx/query-1568b5ea82d844da39dc37f70a4129d89e3c8b6cd91d7738774445a66fa1338e.json new file mode 100644 index 0000000..f66cd25 --- /dev/null +++ b/.sqlx/query-1568b5ea82d844da39dc37f70a4129d89e3c8b6cd91d7738774445a66fa1338e.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "WITH new_user AS (INSERT INTO players (id, room_code) VALUES ($1, $2) RETURNING id) INSERT INTO rooms (player1_id, code) SELECT $1, $2 FROM new_user", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Bpchar", + "Bpchar" + ] + }, + "nullable": [] + }, + "hash": "1568b5ea82d844da39dc37f70a4129d89e3c8b6cd91d7738774445a66fa1338e" +} diff --git a/.sqlx/query-39e83c6ab9294d5b771f3e01ed3709e9ab08d8cf1287b325a0df57521c2d83bc.json b/.sqlx/query-39e83c6ab9294d5b771f3e01ed3709e9ab08d8cf1287b325a0df57521c2d83bc.json new file mode 100644 index 0000000..ac0598f --- /dev/null +++ b/.sqlx/query-39e83c6ab9294d5b771f3e01ed3709e9ab08d8cf1287b325a0df57521c2d83bc.json @@ -0,0 +1,26 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE rooms SET stat = $1 WHERE code = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + { + "Custom": { + "name": "stat", + "kind": { + "Enum": [ + "waiting", + "p1turn", + "p2turn" + ] + } + } + }, + "Bpchar" + ] + }, + "nullable": [] + }, + "hash": "39e83c6ab9294d5b771f3e01ed3709e9ab08d8cf1287b325a0df57521c2d83bc" +} diff --git a/.sqlx/query-6108a32cad01040d876e139b882da3d6a28c448b5a0ad12a67d8e77c64e7c230.json b/.sqlx/query-6108a32cad01040d876e139b882da3d6a28c448b5a0ad12a67d8e77c64e7c230.json new file mode 100644 index 0000000..5e8b6b3 --- /dev/null +++ b/.sqlx/query-6108a32cad01040d876e139b882da3d6a28c448b5a0ad12a67d8e77c64e7c230.json @@ -0,0 +1,45 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT player1_id, player2_id, stat AS \"stat: Status\" FROM rooms WHERE code = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "player1_id", + "type_info": "Bpchar" + }, + { + "ordinal": 1, + "name": "player2_id", + "type_info": "Bpchar" + }, + { + "ordinal": 2, + "name": "stat: Status", + "type_info": { + "Custom": { + "name": "stat", + "kind": { + "Enum": [ + "waiting", + "p1turn", + "p2turn" + ] + } + } + } + } + ], + "parameters": { + "Left": [ + "Bpchar" + ] + }, + "nullable": [ + true, + true, + false + ] + }, + "hash": "6108a32cad01040d876e139b882da3d6a28c448b5a0ad12a67d8e77c64e7c230" +} diff --git a/.sqlx/query-652e975a09db7acd6dd0ff4d6ad190061f9dbc07b97158fe8ad7b22d5aad39c8.json b/.sqlx/query-652e975a09db7acd6dd0ff4d6ad190061f9dbc07b97158fe8ad7b22d5aad39c8.json new file mode 100644 index 0000000..d1d5284 --- /dev/null +++ b/.sqlx/query-652e975a09db7acd6dd0ff4d6ad190061f9dbc07b97158fe8ad7b22d5aad39c8.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE players SET board[$1] = $2 WHERE id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int4", + "Bpchar", + "Bpchar" + ] + }, + "nullable": [] + }, + "hash": "652e975a09db7acd6dd0ff4d6ad190061f9dbc07b97158fe8ad7b22d5aad39c8" +} diff --git a/.sqlx/query-665ac234d9b9e5e6a3be6a54de8474a11586e3bbe9c5295b8566c3ff9334a8c3.json b/.sqlx/query-665ac234d9b9e5e6a3be6a54de8474a11586e3bbe9c5295b8566c3ff9334a8c3.json new file mode 100644 index 0000000..8eb289f --- /dev/null +++ b/.sqlx/query-665ac234d9b9e5e6a3be6a54de8474a11586e3bbe9c5295b8566c3ff9334a8c3.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE players SET board = $1 WHERE id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "BpcharArray", + "Bpchar" + ] + }, + "nullable": [] + }, + "hash": "665ac234d9b9e5e6a3be6a54de8474a11586e3bbe9c5295b8566c3ff9334a8c3" +} diff --git a/.sqlx/query-838ff3277798d0d63e57eb6cbc5c921b36ce8fa8e34cc8b415c43f4163793a3a.json b/.sqlx/query-838ff3277798d0d63e57eb6cbc5c921b36ce8fa8e34cc8b415c43f4163793a3a.json new file mode 100644 index 0000000..ac3c2cc --- /dev/null +++ b/.sqlx/query-838ff3277798d0d63e57eb6cbc5c921b36ce8fa8e34cc8b415c43f4163793a3a.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM players WHERE id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Bpchar" + ] + }, + "nullable": [] + }, + "hash": "838ff3277798d0d63e57eb6cbc5c921b36ce8fa8e34cc8b415c43f4163793a3a" +} diff --git a/.sqlx/query-857420051fa315bca4851b922420fbbeb009b5546471b2f86bafa733e8ccf221.json b/.sqlx/query-857420051fa315bca4851b922420fbbeb009b5546471b2f86bafa733e8ccf221.json new file mode 100644 index 0000000..d2d16af --- /dev/null +++ b/.sqlx/query-857420051fa315bca4851b922420fbbeb009b5546471b2f86bafa733e8ccf221.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT room_code FROM players WHERE id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "room_code", + "type_info": "Bpchar" + } + ], + "parameters": { + "Left": [ + "Bpchar" + ] + }, + "nullable": [ + false + ] + }, + "hash": "857420051fa315bca4851b922420fbbeb009b5546471b2f86bafa733e8ccf221" +} diff --git a/.sqlx/query-886c680debfa2b3b79615056239aa68b9befd5e8fa0d710c0acd9fd5898d3708.json b/.sqlx/query-886c680debfa2b3b79615056239aa68b9befd5e8fa0d710c0acd9fd5898d3708.json new file mode 100644 index 0000000..2deb05c --- /dev/null +++ b/.sqlx/query-886c680debfa2b3b79615056239aa68b9befd5e8fa0d710c0acd9fd5898d3708.json @@ -0,0 +1,28 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT player1_id, player2_id FROM rooms WHERE code = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "player1_id", + "type_info": "Bpchar" + }, + { + "ordinal": 1, + "name": "player2_id", + "type_info": "Bpchar" + } + ], + "parameters": { + "Left": [ + "Bpchar" + ] + }, + "nullable": [ + true, + true + ] + }, + "hash": "886c680debfa2b3b79615056239aa68b9befd5e8fa0d710c0acd9fd5898d3708" +} diff --git a/.sqlx/query-8f8213cf51509cca2706438456f58e958c32a307b5c1eb87c4469347bf5458f6.json b/.sqlx/query-8f8213cf51509cca2706438456f58e958c32a307b5c1eb87c4469347bf5458f6.json new file mode 100644 index 0000000..12b744d --- /dev/null +++ b/.sqlx/query-8f8213cf51509cca2706438456f58e958c32a307b5c1eb87c4469347bf5458f6.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO players (id, room_code) VALUES ($1, $2) ON CONFLICT (id) DO UPDATE SET room_code = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Bpchar", + "Bpchar" + ] + }, + "nullable": [] + }, + "hash": "8f8213cf51509cca2706438456f58e958c32a307b5c1eb87c4469347bf5458f6" +} diff --git a/.sqlx/query-91373ba2f6f9907be9ba0280e49b8886fcc60e7debfe0580325c3767f0af7410.json b/.sqlx/query-91373ba2f6f9907be9ba0280e49b8886fcc60e7debfe0580325c3767f0af7410.json new file mode 100644 index 0000000..08a31f3 --- /dev/null +++ b/.sqlx/query-91373ba2f6f9907be9ba0280e49b8886fcc60e7debfe0580325c3767f0af7410.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE players SET id = $1, abandoned = FALSE WHERE id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Bpchar", + "Bpchar" + ] + }, + "nullable": [] + }, + "hash": "91373ba2f6f9907be9ba0280e49b8886fcc60e7debfe0580325c3767f0af7410" +} diff --git a/.sqlx/query-a2c3b8b4c2ff313bbea7ba16d106a04dd9c162a5ddddec674fcca6fe9e347ac8.json b/.sqlx/query-a2c3b8b4c2ff313bbea7ba16d106a04dd9c162a5ddddec674fcca6fe9e347ac8.json new file mode 100644 index 0000000..3fd9b15 --- /dev/null +++ b/.sqlx/query-a2c3b8b4c2ff313bbea7ba16d106a04dd9c162a5ddddec674fcca6fe9e347ac8.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT board FROM players WHERE id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "board", + "type_info": "BpcharArray" + } + ], + "parameters": { + "Left": [ + "Bpchar" + ] + }, + "nullable": [ + true + ] + }, + "hash": "a2c3b8b4c2ff313bbea7ba16d106a04dd9c162a5ddddec674fcca6fe9e347ac8" +} diff --git a/.sqlx/query-ae4cbc5afe767fbbceeb6c056dbbab2abcd3a8066bd48dde6cb559e4a74d73e9.json b/.sqlx/query-ae4cbc5afe767fbbceeb6c056dbbab2abcd3a8066bd48dde6cb559e4a74d73e9.json new file mode 100644 index 0000000..9014dc7 --- /dev/null +++ b/.sqlx/query-ae4cbc5afe767fbbceeb6c056dbbab2abcd3a8066bd48dde6cb559e4a74d73e9.json @@ -0,0 +1,45 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT stat AS \"stat: Status\", player1_id, player2_id FROM rooms WHERE code = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "stat: Status", + "type_info": { + "Custom": { + "name": "stat", + "kind": { + "Enum": [ + "waiting", + "p1turn", + "p2turn" + ] + } + } + } + }, + { + "ordinal": 1, + "name": "player1_id", + "type_info": "Bpchar" + }, + { + "ordinal": 2, + "name": "player2_id", + "type_info": "Bpchar" + } + ], + "parameters": { + "Left": [ + "Bpchar" + ] + }, + "nullable": [ + false, + true, + true + ] + }, + "hash": "ae4cbc5afe767fbbceeb6c056dbbab2abcd3a8066bd48dde6cb559e4a74d73e9" +} diff --git a/.sqlx/query-e16ac18c9148efc1618f67bd68216eb7d27113847b63eae595b48c756f72ca11.json b/.sqlx/query-e16ac18c9148efc1618f67bd68216eb7d27113847b63eae595b48c756f72ca11.json new file mode 100644 index 0000000..068a1b6 --- /dev/null +++ b/.sqlx/query-e16ac18c9148efc1618f67bd68216eb7d27113847b63eae595b48c756f72ca11.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT code FROM rooms WHERE code = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "code", + "type_info": "Bpchar" + } + ], + "parameters": { + "Left": [ + "Bpchar" + ] + }, + "nullable": [ + false + ] + }, + "hash": "e16ac18c9148efc1618f67bd68216eb7d27113847b63eae595b48c756f72ca11" +} diff --git a/.sqlx/query-f37db03b228702d59233d66c799d520adc9e2e74688ea17b4c36b5abc0fabaa4.json b/.sqlx/query-f37db03b228702d59233d66c799d520adc9e2e74688ea17b4c36b5abc0fabaa4.json new file mode 100644 index 0000000..24042ac --- /dev/null +++ b/.sqlx/query-f37db03b228702d59233d66c799d520adc9e2e74688ea17b4c36b5abc0fabaa4.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE players SET abandoned = TRUE WHERE id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Bpchar" + ] + }, + "nullable": [] + }, + "hash": "f37db03b228702d59233d66c799d520adc9e2e74688ea17b4c36b5abc0fabaa4" +} diff --git a/.sqlx/query-f9c94f686e78e9d6ca5a68d658e333a1791de7353faef131f0c6b6d07a0aad16.json b/.sqlx/query-f9c94f686e78e9d6ca5a68d658e333a1791de7353faef131f0c6b6d07a0aad16.json new file mode 100644 index 0000000..a893118 --- /dev/null +++ b/.sqlx/query-f9c94f686e78e9d6ca5a68d658e333a1791de7353faef131f0c6b6d07a0aad16.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT abandoned FROM players WHERE id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "abandoned", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Bpchar" + ] + }, + "nullable": [ + false + ] + }, + "hash": "f9c94f686e78e9d6ca5a68d658e333a1791de7353faef131f0c6b6d07a0aad16" +} diff --git a/src/game.rs b/src/game.rs index d56ff68..ce99ce9 100644 --- a/src/game.rs +++ b/src/game.rs @@ -64,7 +64,7 @@ async fn generate_code(pool: &sqlx::PgPool) -> Result { pub async fn add_room(sid: Sid, pool: &sqlx::PgPool) -> Result { delete_sid(sid.as_str(), pool).await?; - let code = generate_code(&pool).await?; + let code = generate_code(pool).await?; sqlx::query!( r"WITH new_user AS (INSERT INTO players (id, room_code) VALUES ($1, $2) RETURNING id) INSERT INTO rooms (player1_id, code) SELECT $1, $2 FROM new_user", @@ -88,11 +88,11 @@ pub async fn join_room(sid: Sid, code: String, pool: &sqlx::PgPool) -> Result<() let sid = sid.as_str(); if let (Some(p1), Some(p2)) = (room.player1_id.as_ref(), room.player2_id.as_ref()) { - if in_delete_sid(&p1, &pool).await? { - update_sid(&p1, sid, pool).await?; + if in_delete_sid(p1, pool).await? { + update_sid(p1, sid, pool).await?; return Err(Error::RoomFull(Some(p1.to_string()))); - } else if in_delete_sid(&p2, &pool).await? { - update_sid(&p2, sid, pool).await?; + } else if in_delete_sid(p2, pool).await? { + update_sid(p2, sid, pool).await?; return Err(Error::RoomFull(Some(p2.to_string()))); } return Err(Error::RoomFull(None)); @@ -205,7 +205,6 @@ pub async fn get_game_state( .into_iter() .map(|row| { row.chars() - .into_iter() .map(|x| if x == 's' { 'e' } else { x }) .collect() }) diff --git a/src/main.rs b/src/main.rs index ba2d60e..6bead74 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,7 +8,6 @@ use game::{ add_board, add_room, attack, delete_sid, get_game_state, get_room, join_room, room_if_player_exists, start, to_delete_sid, update_sid, Error, ROOM_CODE_LENGTH, }; -use rand::Rng; use serde::Deserialize; use socketioxide::{ @@ -58,8 +57,8 @@ async fn on_connect(socket: SocketRef, Data(auth): Data, pool: Stat if let Some(sid) = auth.session { update_sid(&sid, socket.id.as_str(), &pool).await.unwrap(); let sid = socket.id.as_str(); - if let Some(room) = room_if_player_exists(&sid, &pool).await.unwrap() { - let data = get_game_state(&sid, &room, &pool).await.unwrap(); + if let Some(room) = room_if_player_exists(sid, &pool).await.unwrap() { + let data = get_game_state(sid, &room, &pool).await.unwrap(); socket .emit( "restore", @@ -116,7 +115,7 @@ async fn on_connect(socket: SocketRef, Data(auth): Data, pool: Stat if let Err(e) = &room_error { if let Error::RoomFull(Some(player)) = &e { tracing::warn!("{:?}", e); - update_sid(&player, socket.id.as_str(), &pool).await.unwrap(); + update_sid(player, socket.id.as_str(), &pool).await.unwrap(); let data = get_game_state(socket.id.as_str(), &room, &pool).await.unwrap(); socket .emit( @@ -220,9 +219,9 @@ async fn leave_and_inform(socket: &SocketRef, pool: &PgPool, delete: bool) { emit_update_room(socket, &room.to_string(), ops.sockets().unwrap().len()); let sid = socket.id.as_str(); if let Err(e) = if delete { - delete_sid(sid, &pool).await + delete_sid(sid, pool).await } else { - to_delete_sid(sid, &pool).await + to_delete_sid(sid, pool).await } { tracing::error!("{:?}", e); }