]> git.seodisparate.com - EN605.607.81.SP22_ASDM_Project/commitdiff
Impl "too_many_players" response from back-end
authorStephen Seo <seo.disparate@gmail.com>
Fri, 8 Apr 2022 02:01:33 +0000 (11:01 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Fri, 8 Apr 2022 02:01:33 +0000 (11:01 +0900)
Previous implementation did not respond with the proper JSON response if
there were too many players.

back_end/src/db_handler.rs
back_end/src/json_handlers.rs
front_end/src/state.rs

index a572404533f5153f15468bb7ca464e98abcd8e3d..534239f843b242f1506e707803420c113131eb19 100644 (file)
@@ -19,7 +19,9 @@ use std::{fmt, thread};
 use rand::{thread_rng, Rng};
 use rusqlite::{params, Connection, Error as RusqliteError};
 
-pub type GetIDSenderType = (u32, Option<bool>);
+/// first value is ID, None if too many players
+/// second value is true if player is cyan_player, None if not paired yet
+pub type GetIDSenderType = (Option<u32>, Option<bool>);
 /// first bool is player exists,
 /// second bool is if paired,
 /// third bool is if cyan player
@@ -172,6 +174,7 @@ impl DBHandler {
                 let create_player_result = self.create_new_player(Some(&conn));
                 if let Err(e) = create_player_result {
                     println!("{}", e);
+                    player_tx.send((None, None)).ok();
                     // don't stop server because player limit may have been reached
                     return false;
                 }
@@ -193,11 +196,11 @@ impl DBHandler {
                         if paired {
                             // don't stop server on send fail, may have timed
                             // out and dropped the receiver
-                            player_tx.send((player_id, Some(is_cyan))).ok();
+                            player_tx.send((Some(player_id), Some(is_cyan))).ok();
                         } else {
                             // don't stop server on send fail, may have timed
                             // out and dropped the receiver
-                            player_tx.send((player_id, None)).ok();
+                            player_tx.send((Some(player_id), None)).ok();
                         }
                     } else {
                         println!("Internal error, created player doesn't exist");
index 8984f265549a1e9c45f9b9960a4692deaae866af..f7249b1aa1a8aed8c75fb65534856aa37d21ce8b 100644 (file)
@@ -41,7 +41,11 @@ fn handle_pairing_request(tx: SyncSender<DBHandlerRequest>) -> Result<String, St
     if tx.send(DBHandlerRequest::GetID(player_tx)).is_err() {
         return Err("{\"type\":\"pairing_response\", \"status\":\"internal_error\"}".into());
     }
-    if let Ok((pid, is_cyan_opt)) = player_rx.recv_timeout(DB_REQUEST_TIMEOUT) {
+    if let Ok((pid_opt, is_cyan_opt)) = player_rx.recv_timeout(DB_REQUEST_TIMEOUT) {
+        if pid_opt.is_none() {
+            return Ok("{\"type\":\"pairing_response\", \"status\":\"too_many_players\"}".into());
+        }
+        let pid = pid_opt.unwrap();
         if let Some(is_cyan) = is_cyan_opt {
             Ok(format!(
                 "{{\"type\":\"pairing_response\", \"id\": {}, \"status\": \"paired\", \"color\": \"{}\"}}",
index 2fd5d6fb96e309232e230fe395ae3b007dcb7594..ff5af2d14df0189ee86137d1f1694ba175b42c5b 100644 (file)
@@ -35,9 +35,9 @@ impl GameState {
         matches!(
             self,
             GameState::NetworkedMultiplayer {
-                paired,
-                current_side,
-                current_turn
+                paired: _,
+                current_side: _,
+                current_turn: _
             }
         )
     }
@@ -55,9 +55,9 @@ impl GameState {
 
     pub fn get_networked_current_side(&self) -> Option<Turn> {
         if let GameState::NetworkedMultiplayer {
-            paired,
+            paired: _,
             current_side,
-            current_turn,
+            current_turn: _,
         } = *self
         {
             current_side
@@ -68,9 +68,9 @@ impl GameState {
 
     pub fn set_networked_current_side(&mut self, side: Option<Turn>) {
         if let GameState::NetworkedMultiplayer {
-            paired,
+            paired: _,
             ref mut current_side,
-            current_turn,
+            current_turn: _,
         } = self
         {
             *current_side = side;