summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bin/client/repl.rs77
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}