diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/bin/client/repl.rs | 77 |
1 files changed, 44 insertions, 33 deletions
diff --git a/src/bin/client/repl.rs b/src/bin/client/repl.rs index dfcf0d2..c7e3b9d 100644 --- a/src/bin/client/repl.rs +++ b/src/bin/client/repl.rs | |||
| @@ -85,7 +85,12 @@ impl ClientState { | |||
| 85 | if let Some(mut stream) = self.stream.take() { | 85 | if let Some(mut stream) = self.stream.take() { |
| 86 | match self.game_manager.start_game(&mut stream) { | 86 | match self.game_manager.start_game(&mut stream) { |
| 87 | Ok(()) => { | 87 | Ok(()) => { |
| 88 | self.play_spin_animation(&mut stream); | 88 | let response = self.read_server_response(&mut stream); |
| 89 | if response.trim().starts_with("ERROR") { | ||
| 90 | println!("\n{}", response.trim()); | ||
| 91 | } else { | ||
| 92 | self.play_spin_animation(&response); | ||
| 93 | } | ||
| 89 | self.game_manager.reset_phase_to_waiting(); | 94 | self.game_manager.reset_phase_to_waiting(); |
| 90 | } | 95 | } |
| 91 | Err(e) => println!("\nError starting game: {:?}", e), | 96 | Err(e) => println!("\nError starting game: {:?}", e), |
| @@ -654,7 +659,16 @@ impl ClientState { | |||
| 654 | // else do nothing | 659 | // else do nothing |
| 655 | } | 660 | } |
| 656 | 661 | ||
| 657 | fn play_spin_animation(&mut self, stream: &mut TlsStream) { | 662 | /// Read the server response after PLAY_START. |
| 663 | fn read_server_response(&self, stream: &mut TlsStream) -> String { | ||
| 664 | let mut response = String::new(); | ||
| 665 | let mut reader = std::io::BufReader::new(stream.try_clone().unwrap()); | ||
| 666 | let _ = reader.read_line(&mut response); | ||
| 667 | response | ||
| 668 | } | ||
| 669 | |||
| 670 | /// Run the spinning animation and display the final result. | ||
| 671 | fn play_spin_animation(&mut self, response: &str) { | ||
| 658 | use std::io::Write; | 672 | use std::io::Write; |
| 659 | use std::thread; | 673 | use std::thread; |
| 660 | use std::time::Duration; | 674 | use std::time::Duration; |
| @@ -680,39 +694,36 @@ impl ClientState { | |||
| 680 | thread::sleep(delay); | 694 | thread::sleep(delay); |
| 681 | } | 695 | } |
| 682 | 696 | ||
| 683 | let mut response_str = String::new(); | 697 | let response = response.trim(); |
| 684 | let mut reader = std::io::BufReader::new(stream.try_clone().unwrap()); | 698 | if response.starts_with("GAME_RESULT") { |
| 685 | if reader.read_line(&mut response_str).is_ok() { | 699 | let parts: Vec<&str> = response.split_whitespace().collect(); |
| 686 | let response = response_str.trim(); | 700 | if parts.len() >= 7 { |
| 687 | 701 | let reels = parts[5]; | |
| 688 | if response.starts_with("GAME_RESULT") { | 702 | let win_type = parts[6]; |
| 689 | let parts: Vec<&str> = response.split_whitespace().collect(); | 703 | |
| 690 | if parts.len() >= 7 { | 704 | execute!(stdout(), Clear(ClearType::CurrentLine), MoveToColumn(0)).unwrap(); |
| 691 | let reels = parts[5]; | 705 | print!( |
| 692 | let win_type = parts[6]; | 706 | "[ {} ] [ {} ] [ {} ]", |
| 693 | 707 | reels.chars().nth(0).unwrap_or('?'), | |
| 694 | execute!(stdout(), Clear(ClearType::CurrentLine), MoveToColumn(0)).unwrap(); | 708 | reels.chars().nth(1).unwrap_or('?'), |
| 695 | print!( | 709 | reels.chars().nth(2).unwrap_or('?') |
| 696 | "[ {} ] [ {} ] [ {} ]", | 710 | ); |
| 697 | reels.chars().nth(0).unwrap_or('?'), | 711 | println!(); |
| 698 | reels.chars().nth(1).unwrap_or('?'), | 712 | |
| 699 | reels.chars().nth(2).unwrap_or('?') | 713 | if win_type == "jackpot" { |
| 700 | ); | 714 | println!("\nđ JACKPOT! đ"); |
| 701 | println!(); | 715 | } else if win_type == "two" { |
| 702 | 716 | println!("\n⨠Two of a kind! â¨"); | |
| 703 | if win_type == "jackpot" { | 717 | } else { |
| 704 | println!("\nđ JACKPOT! đ"); | 718 | println!("\nNo win."); |
| 705 | } else if win_type == "two" { | ||
| 706 | println!("\n⨠Two of a kind! â¨"); | ||
| 707 | } else { | ||
| 708 | println!("\nNo win."); | ||
| 709 | } | ||
| 710 | |||
| 711 | println!("Winnings: {} PLN", parts[2]); | ||
| 712 | println!("New Balance: {} PLN", parts[4]); | ||
| 713 | stdout().flush().unwrap(); | ||
| 714 | } | 719 | } |
| 720 | |||
| 721 | println!("Winnings: {} PLN", parts[2]); | ||
| 722 | println!("New Balance: {} PLN", parts[4]); | ||
| 723 | stdout().flush().unwrap(); | ||
| 715 | } | 724 | } |
| 725 | } else if response.starts_with("ERROR") { | ||
| 726 | println!("\n{}", response); | ||
| 716 | } | 727 | } |
| 717 | } | 728 | } |
| 718 | } | 729 | } |
